PHP Update查询报错求助:time字段语法问题及正确写法咨询
解决MySQL UPDATE语句的语法错误问题
嘿,我看到你在写UPDATE语句的时候踩坑了,别着急,咱们一步步把问题解决掉!
问题根源
你用了单引号'来包裹字段名(比如'offer_punch'),但在MySQL里,单引号是用来定义字符串常量的,字段名需要用反引号`(键盘左上角~键对应的符号)来包裹——如果字段名不是SQL关键字,甚至可以不用任何引号。
你的原语句把字段名当成字符串处理,数据库自然找不到对应的列,所以才会返回“出现错误”的提示。
正确的UPDATE语句写法
把所有包裹字段名的单引号换成反引号就行,示例如下:
$query = "UPDATE nesbaty_offer SET `offer_punch` = '$offer_punch', `offer_description` = '$offer_description', `terms` = '$terms', `sales_discount` = '$sales_discount', `referal` = '$referal', `duration` = '$duration' -- 一定要加上WHERE条件!不然会更新表中所有数据! WHERE your_condition_here;";
重要提醒:规避SQL注入风险
上面的写法虽然修正了语法错误,但直接把变量拼进SQL语句里存在严重的SQL注入漏洞,生产环境里强烈建议改用预处理语句(Prepared Statements),比如用PDO或者mysqli实现:
PDO示例
// 假设你已经建立了PDO连接$pdo $stmt = $pdo->prepare("UPDATE nesbaty_offer SET `offer_punch` = ?, `offer_description` = ?, `terms` = ?, `sales_discount` = ?, `referal` = ?, `duration` = ? WHERE your_condition_here;"); $stmt->execute([$offer_punch, $offer_description, $terms, $sales_discount, $referal, $duration]);
mysqli示例
// 假设你已经建立了mysqli连接$conn $stmt = $conn->prepare("UPDATE nesbaty_offer SET `offer_punch` = ?, `offer_description` = ?, `terms` = ?, `sales_discount` = ?, `referal` = ?, `duration` = ? WHERE your_condition_here;"); $stmt->bind_param("ssssss", $offer_punch, $offer_description, $terms, $sales_discount, $referal, $duration); $stmt->execute();
预处理语句会自动处理变量的转义,从根本上避免SQL注入,这是后端开发必须遵循的最佳实践。
内容的提问来源于stack exchange,提问作者Jayvirsinh Vaghela
相关产品推荐
相关产品推荐

