You need to enable JavaScript to run this app. PDO预处理语句SQL语法错误及无效参数号问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

PDO预处理语句SQL语法错误及无效参数号问题咨询

代码错误原因

  1. 命名占位符:df本身不需要加单引号包裹,你加单引号后PDO会将':df'识别为普通字符串,不再将其当做待绑定的参数,自然会报SQLSTATE[HY093]: Invalid parameter number参数不匹配错误。
  2. 你最初触发报错的核心原因是错误使用bindParam方法:bindParam的第二个参数要求是变量引用,不能直接传入字符串字面量,这才是你一开始出现报错的根源。

正确写法

方案一:使用bindValue方法

bindValue支持直接传入固定字面量,无需变量引用:

$sql = "SELECT Id from users where Phone_number = :df";
$stmt = $this->db->prepare($sql);
$stmt->bindValue(":df", "093057789655", PDO::PARAM_STR);

方案二:先赋值变量再使用bindParam

如果要保留bindParam的写法,先把要绑定的值存入变量再传入:

$phoneNum = "093057789655";
$sql = "SELECT Id from users where Phone_number = :df";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(":df", $phoneNum, PDO::PARAM_STR);

更简洁的写法

你也可以直接在execute方法中传入参数数组,无需单独调用绑定方法:

$sql = "SELECT Id from users where Phone_number = :df";
$stmt = $this->db->prepare($sql);
$stmt->execute([":df" => "093057789655"]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 23:36:11