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
相关产品推荐
相关产品推荐

