You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:50:38