我目前正在开发一个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);
我无法理解,任何帮助都会受到赞赏。
答案 0 :(得分:1)
我认为您的问题与mysql reserver keywords
无关,因为您使用反引号正确包围了Value
并且使数据库理解这是一个字段。我更关心的是不将整数视为整数,因此我建议用引号''
包围你的值,因为它是小数
`Value` = '".$_POST['txtValueBalance']."',