我正在尝试使用MySQL UPDATE查询来更新数据库中的两个项目。但是,它似乎只是更新查询中询问的一半。
我使用的代码如下:
$db->query("UPDATE User_files SET Uploads=" . $rows['Uploads']-=1 . ", Files='" . $newfilesescaped . "' WHERE user=" . $escapeduser . "");
它会更新一半查询,即将“上传”设置为正确的数字。但是,“文件列”保持与以前完全相同。
我已经回复了$ newfilesescaped以及var_dumped它,两者都返回了我想要更新的产品。
答案 0 :(得分:1)
这应该可以正常工作:
$db->query("UPDATE User_files SET Uploads='". --$rows['Uploads'] ."', Files='". $newfilesescaped ."' WHERE user='" . $escapeduser ."'");
但是我想指出,像这样你可以对SQL注入做广泛的开放。我建议你使用mysqli()或者PDO()查看准备好的语句 {{3}}
答案 1 :(得分:1)
您的sql语句错误:-=
运算符的precedence运算符低于.
运算符。
你应该在sql语句之外做数学运算或使用类似的东西:
"UPDATE User_files SET Uploads=" . --$rows['Uploads'] . ", Files='" . $newfilesescaped . "' WHERE user=" . $escapeduser
现在,在应用该操作之前,您将在-=
的两端连接字符串,并且您的sql语句将不是您期望的那样。
请参阅此处an example of both sql strings以及生成的sql语句之间的区别。请注意,您现在拥有的内容将更新表格中所有行的Uploads
列。
答案 2 :(得分:0)
您有一些语法错误(需要启用错误报告)
$db->query("UPDATE `User_files` SET `Uploads`=" . $rows['Uploads']-=1 . ", `Files`='" . $newfilesescaped . "' WHERE user='" . $escapeduser . "' ");
您还需要阅读Prevent SQL Injection!