MySQL只更新了一半的查询

时间:2014-11-05 17:04:52

标签: php mysql sql-update

我正在尝试使用MySQL UPDATE查询来更新数据库中的两个项目。但是,它似乎只是更新查询中询问的一半。

我使用的代码如下:

$db->query("UPDATE User_files SET Uploads=" . $rows['Uploads']-=1 . ", Files='" . $newfilesescaped . "' WHERE user=" . $escapeduser . "");

它会更新一半查询,即将“上传”设置为正确的数字。但是,“文件列”保持与以前完全相同。

我已经回复了$ newfilesescaped以及var_dumped它,两者都返回了我想要更新的产品。

3 个答案:

答案 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!