2013-08-28 41 views
2

我有以下的代碼在PHP中的某個地方寫着:爲什麼MySQL使用值更改列名稱?

$sql="UPDATE drivers ". 
"SET Location=$lo ". 
"WHERE DriverId=$id"; 

echo $sql; 

回聲的結果是

更新驅動程序集位置= LOCA WHERE DriverId = 3

然而,當我跑

$result = mysqli_query($con2,$sql); 
echo $result; 
echo mysqli_error($con2); 

我得到

在「字段列表」

爲什麼會出現「失水」,而不是作爲定位列名未知列「洛卡」?

+0

什麼是'$ lo'? –

+0

$ lo通過POST方法獲得值locA在php – bubble

+0

@relentless它是'locA',如輸出中所示,缺少插入字符串所需的引號。 – nos

回答

3

LOCA是一個字符串,需要引用。

$sql="UPDATE drivers ". 
"SET Location='$lo' ". 
"WHERE DriverId=$id"; 

你應該看看使用PDO和準備好的語句爲你做報價。

+0

'mysqli'也可以做到這一點,但你需要準備和執行兩個單獨的步驟。 – tadman

2

你需要把$lo單引號內:

$sql="UPDATE drivers ". 
"SET Location='$lo' ". 
"WHERE DriverId='$id'"; 
1

至少你必須

$ sql =「更新驅動程序」。 「SET Location ='$ lo'」。 「WHERE DriverId = $ id」;

但轉到mysqli並使用準備的語句來代替。如果您按照我建議的方式進行SQL注入。

1

MySQL試圖將locA評估爲字段,因爲它不是字符串值。嘗試更多的東西一樣:

$sql="UPDATE drivers ". 
"SET Location='".$lo."' ". 
"WHERE DriverId=$id"; 

這將導致:

更新驅動程序集位置=「失水」 WHERE DriverId = 3

PDO和準備語句將雖然去爲別人的方式已經提到。