2013-08-28 42 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和准备语句将虽然去为别人的方式已经提到。