PDO预处理语句SQL语法错误及无效参数号问题咨询
代码错误原因
- 命名占位符
:df本身不需要加单引号包裹,你加单引号后PDO会将':df'识别为普通字符串,不再将其当做待绑定的参数,自然会报SQLSTATE[HY093]: Invalid parameter number参数不匹配错误。 - 你最初触发报错的核心原因是错误使用
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
相关产品推荐
相关产品推荐

