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

PDO执行INSERT ON DUPLICATE KEY UPDATE存入布尔值而非绑定值问题

问题根因

你的代码错误出在INSERT语句的VALUES子句语法错误,你把UPDATE的赋值写法误用在了VALUES的取值位置:

  • VALUES后面括号内的内容是待插入的字段值列表,不需要写字段名 = 取值的格式,直接按前面声明的字段顺序写对应的值即可
  • 你写的companyName = :companyName在SQL中会被识别为布尔比较表达式,执行时会返回比较结果:字段初始空值和传入的参数不相等就返回0,相等返回1,这就是你插入数据得到0/1布尔值的直接原因

修正后的代码

$sql = "INSERT INTO company 
                (userid, companyName, registeredAddress, registeredPostcode) 
        VALUES (:userid, :companyName, :registeredAddress, :registeredPostcode) 
        ON DUPLICATE KEY UPDATE 
            companyName = :companyName,
            registeredAddress = :registeredAddress, 
            registeredPostcode = :registeredPostcode;";  

$stmt = $this->connect()->prepare($sql);
$stmt->execute([
    'userid' => $userid,
    'companyName' => $companyname, 
    'registeredAddress' => $registeredaddress,          
    'registeredPostcode' => $registeredpostcode
]);

额外优化说明

  • 原代码中$userid是直接拼接到SQL语句中的,如果该值来自用户输入会存在SQL注入风险,修正后统一改为参数绑定更安全
  • 请确保userid字段已经设置了主键或者唯一索引(UNIQUE),否则ON DUPLICATE KEY UPDATE逻辑不会触发

内容的提问来源于stack exchange,提问作者neilt79

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:15:03