在php中使用sql update query中的保留字会覆盖整个表

时间:2013-05-17 08:29:13

标签: php mysql sql

我目前正在开发一个php项目,并使用“value”这个词作为列名。问题在于,当我运行查询时,它会覆盖数据库中的所有条目,即使我有一个分隔符(主键= * )。我已经尝试了一切我能想到的东西让它发挥作用,它还没有。这是完整的代码行:

$SqlStatement = "UPDATE rev_exp SET Date_Entered = '".date('Y-m-d')."', Description = '".$_POST['txtUtilityType']." ".$_POST['txtAccountNumber']." ".$_POST['txtDateAdded']."', `Value` = ".$_POST['txtValueBalance'].", Notes = '".$_POST['txtNotes']."' WHERE PK_Rev_Exp = ".$row['FK_Rev_Exp'];

请注意,$ row ['FK_Rev_Exp']是我所说的分隔符。它是从以前的查询中准确拉出的。另外,请忽略任何sql注入问题,我只是努力让项目正常运行,我可以稍后进行优化。

编辑1:我也尝试将“价值”包含在我能想到的可以摆脱这个问题的所有内容中,但没有运气。

编辑2:我也不认为这是语句本身的问题,因为我直接将语句输入mysql命令行,它只影响了1行,可能是php问题?

编辑3:完全阻止,包括执行sql。在这里,ExecuteSQL运行所有必要的mysqli语句来执行sql命令。如果有结果集,它会接受sql语句和true / false:

$SqlStatement = "UPDATE rev_exp SET Date_Entered = '".date('Y-m-d')."', Description = '".$_POST['txtUtilityType']." ".$_POST['txtAccountNumber']." ".$_POST['txtDateAdded']."', `Value` = '".$_POST['txtValueBalance']."', Notes = '".$_POST['txtNotes']."' WHERE PK_Rev_Exp = ".$row['FK_Rev_Exp'];
ExecuteSQL($SqlStatement, false);

我无法理解,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我认为您的问题与mysql reserver keywords无关,因为您使用反引号正确包围了Value并且使数据库理解这是一个字段。我更关心的是不将整数视为整数,因此我建议用引号''包围你的值,因为它是小数

`Value` = '".$_POST['txtValueBalance']."',