UPDATE查询报错:Truncated incorrect DOUBLE value问题求助
问题排查与解决方案
嘿,我来帮你搞定这个UPDATE查询的问题!从你给出的错误信息和SQL语句来看,主要有几个核心问题需要解决:
1. SQL语句的字符串拼接语法错误
你在拼接SQL的时候犯了一个典型的低级错误——把PHP的字符串连接符.也写到了最终的SQL语句里。看错误日志里的SQL内容:
UPDATE nouveauxannonce set An_titre='.dejachanger.' , An_description='.pmiuhbmijlbjn.' where id='.10.'
这里的'.dejachanger.'完全不符合SQL语法,数据库会把.dejachanger.当成一个无效的标识符,而不是你期望的字符串值dejachanger。
如果非要用字符串拼接(非常不推荐,后面会说原因),正确的写法应该是这样:
// 双引号内直接解析变量 $sql = "UPDATE nouveauxannonce set An_titre='$titre' , An_description='$description' where id=$id";
或者用单引号包裹SQL语句,再正确拼接变量:
$sql = 'UPDATE nouveauxannonce set An_titre="' . $titre . '" , An_description="' . $description . '" where id=' . $id;
注意:如果id字段是数字类型(比如INT),不需要给它加引号,直接写数字即可。
2. 数据类型不匹配触发的DOUBLE截断错误
错误提示里的Truncated incorrect DOUBLE value,是因为你的id字段是数字类型(比如INT或DOUBLE),但错误的SQL里把id写成了'.10.',数据库尝试把这个奇怪的字符串转成数字时失败,就触发了截断错误。
3. 必须重视的SQL注入风险
上面的字符串拼接写法存在严重的SQL注入漏洞,恶意用户可以通过表单提交特殊内容直接篡改你的数据库,这是绝对不能忽视的安全问题。正确的做法是使用预处理语句(Prepared Statements),下面给你两种常见的实现方式:
方式一:使用PDO(推荐)
// 假设你已经建立了PDO连接$pdo $stmt = $pdo->prepare("UPDATE nouveauxannonce set An_titre=:titre, An_description=:description where id=:id"); $stmt->execute([ 'titre' => $titre, 'description' => $description, 'id' => $id ]);
方式二:使用mysqli
// 假设你已经建立了mysqli连接$conn $stmt = $conn->prepare("UPDATE nouveauxannonce set An_titre=?, An_description=? where id=?"); // "ssi"表示前两个参数是字符串(String),第三个是整数(Integer) $stmt->bind_param("ssi", $titre, $description, $id); $stmt->execute();
预处理语句会自动处理变量的转义和类型匹配,既解决了语法错误,又彻底避免了SQL注入问题,这是处理用户输入的标准安全做法。
内容的提问来源于stack exchange,提问作者mohamed farjallah
相关产品推荐
相关产品推荐

