PHP执行MySQL UPDATE产品数据语句报SQL语法错误如何解决
问题根因
你的SQL语法错误核心原因是:字符串类型的字段值没有用单引号包裹。name、color这类字符串类型字段,插入/更新的值如果是包含空格、特殊字符的字符串,必须用单引号括起来,否则SQL解析器会把空格后的内容识别为SQL关键字,触发语法报错。你现在生成的SQL里name=samsung galaxy note 20 ultra没有加单引号,直接就触发了语法错误。
临时修复方案
直接给字符串字段的变量外包一层单引号即可:
$sql="UPDATE product SET name='$newname' , price=$price , stock=$stock , color='$color' WHERE id=$id";
提示:数字类型的字段(比如price、stock、id)如果确认是整数类型可以不加单引号,字符串类型的字段值必须加单引号。
最佳实践(强烈建议使用)
上面的写法存在严重的SQL注入风险,正确的做法是使用预处理语句绑定参数,既可以完全避免引号处理的语法问题,也能杜绝注入风险:
// 预处理SQL模板 $stmt = $conn->prepare("UPDATE product SET name=?, price=?, stock=?, color=? WHERE id=?"); // 绑定参数,s对应字符串类型,i对应整数类型,按顺序对应问号的位置 $stmt->bind_param("siisi", $newname, $price, $stock, $color, $id); // 执行语句 if($stmt->execute()){ echo "product update"; } $stmt->close();
内容的提问来源于stack exchange,提问作者Asheer Butt
相关产品推荐
相关产品推荐

