【问题标题】:(UPDATE SET) You have an error in your SQL syntax(UPDATE SET) 您的 SQL 语法有错误
【发布时间】:2015-10-03 13:10:07
【问题描述】:

此代码有效,表正在更新,但服务器响应: “您的 SQL 语法有误”。

为了利益而询问。请告诉我哪里出错了

$id = $_POST['id'];
$name = $_POST['name'];
$image = $_POST['image'];
$price = $_POST['price'];

mysql_connect("localhost","main","password");
mysql_select_db("main");

$result = mysql_query("SELECT * FROM goods WHERE id='".$id."'");
if(mysql_num_rows($result) > 0) {
    $newquery = mysql_query("UPDATE goods SET name='".$name."', image='".$image."', price='".$price."' WHERE id='".$id."'");
    if(!mysql_query($newquery)) {
        die('Invalid query: ' . mysql_error());
    } else {
        echo "Updated successfully";
        }
    } else {
        echo "Error: there is no such product in DB";
    }

错误:

无效查询:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“1”附近使用正确的语法

【问题讨论】:

标签: php mysql database


【解决方案1】:

您的插入值是字符串。所以你必须使用 " 或 ' 来包装它:

$sql = "UPDATE users SET fullname = '".$fullname."', bio = '".$bio."', 
birthdate = '".$birthdate."', pass = '".$newpass."',
WHERE username = '".$susername."'";

【讨论】:

    【解决方案2】:

    'name' 是 MySQL keyword。如果您打算将其用作列名,则在对列执行查询时必须使用反引号:

    "UPDATE `goods` SET `name`='".$name."', `image`='".$image."', `price`='".$price."' WHERE `id`='".$id."'"
    

    【讨论】:

    • 不,这没有意义。还是语法错误。稍后我会检查你的链接,谢谢你的时间
    【解决方案3】:

    你的 where 条件是错误的。它需要一个整数而不是 ID 字符串。

    应该是:

    $newquery = mysql_query("UPDATE goods SET name='".$name."', image='".$image."', price='".$price."' WHERE id=".$id);
    

    但是你应该注意两件事。

    1. mysql_query 和所有 mysql_ 函数已被替换为 mysqli_

    2. 您很容易受到 SQL 注入的攻击。您应该使用 PDO 或任何 ORM/数据库抽象来为您处理查询以防止这种情况发生。

    【讨论】:

    • 有几件事: 1.) 尝试从 MySQL 中的整数列中选择字符串和数字,看看会发生什么。 B.) mysqli_* 没有取代 mysql_*,它是改进的 API,在某些情况下具有完全不同的语法。 3.)如果您使用 PDO,则无需使用mysqli_*¯\_(ツ)_/¯
    • 1.很可能是他的参数出错了,甚至可能在值周围有一个引号,或者其他东西干扰了他的陈述。 B) mysqli 有一个通用接口,所以大多数时候你可以使用 mysqli_ 函数作为替代,尽管首选 OO 版本。 3)我只是提到他应该主要使用PDO以避免必须做所有艰苦的工作来过滤掉输入以防止sql注入
    • 使用 MySQLi 时也可以过滤输入。
    • 是的。但希望使用 PDO 方法,他们有望避免导致这些漏洞的陷阱。
    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2016-10-30
    • 2014-04-21
    • 2014-06-08
    • 2016-01-24
    相关资源
    最近更新 更多