php PDO语句::执行():SQL状态[HY093]:无效的参数编号:未定义参数

xmjla07d  于 2023-01-29  发布在  PHP
关注(0)|答案(3)|浏览(202)

下面是我的代码,我不能解决这个错误。任何帮助是感激的。我正在尝试更新我的数据库中的一个表。

public function updateUnit($params){
    $user = 'monil';
    $password = 'Masters123';   
    $dbh = new \PDO('mysql:host=127.0.0.1;dbname=tcsdb', $user, $password);

    $task=array(':UnitCode'=>$params['UnitCode'],':UnitDescription'=>$params['UnitDescription']    ,
      ':UnitName'=>$params['UnitName'], ':UnitID'=>$params['UnitID']);
    echo $params['UnitID'];

    $sth = $dbh->prepare('UPDATE unit SET UnitCode = :UnitCode,'
        . 'UnitDescription = :UnitDescription,UnitName = :UnitName WHERE UnitId=:UnitId');
    $sth->execute($task); 

    return true;
}
qvtsj1bj

qvtsj1bj1#

execute()/binding中使用的参数名应该与SQL查询中使用的参数名完全匹配,这就是命名参数的意义所在。
您需要检查SQL中的每个占位符,看其名称是否与execute()、bindParam()或bindValue()中使用的名称匹配。
在您的示例中,:UnitID:UnitId不同,字母大小写不同。
在极少数情况下,错误可能是由占位符名称不正确引起的。只允许使用[a-zA-Z0-9_]字符。

vnzz0bqm

vnzz0bqm2#

当您错过以下内容时,会出现相同的错误:创建语句时使用冒号。
例如:以下语句抛出无效参数错误,因为VALUES中缺少密码:冒号。

$stmt = $db->prepare('INSERT INTO members (username,password) VALUES (:username, password)');
qc6wkl3g

qc6wkl3g3#

如果在bindParam中使用.””点,也可能发生相同的错误
例如

$query = "select * from t where t1 = :foo.bar";
$stmt = $pdo->prepare($query);
$stmt->execute([':foo.bar' => 'blah']);

相关问题