SQLSTATE[HY093]:参数编号无效:绑定变量数与标记数不匹配.但它确实如此?



在过去的一个小时里,我一直在与这个问题作斗争,正要跳出窗外。我正在尝试使用可变数量的参数进行更新查询:数据将通过表单提供,但某些字段(surName2 和电子邮件(是可选的,因此仅当用户用数据填充它们时,它们才会包含在查询中。

因此,我检查它们是否已设置,如果是,则通过字符串$strFields修改查询,然后使用bindValue((将它们添加到$pdo查询中。但是,当我运行它时,我收到一条错误消息,指出绑定参数的数量与查询中的参数数量不匹配。我只是找不到我做错了什么,所有 6 个变量都有数据并且所有绑定都在执行,但它只是不起作用:

$strFields = '';
if (isset($_POST['surName2'])) $strFields .= ', surName2=:surName2';
if (isset($_POST['email'])) $strFields .= ', email=:email';
$stmt = $pdo->prepare('UPDATE users SET userName=:userName, name=:name, surName1:=surName1'.$strFields.' WHERE user_id=:user_id');
$stmt->bindValue(':userName', $_POST['userName']);
$stmt->bindValue(':name', $_POST['name']);
$stmt->bindValue(':surName1', $_POST['surName1']);
if (isset($_POST['surName2'])) $stmt->bindValue(':surName2', $_POST['surName2']);
if (isset($_POST['email'])) $stmt->bindValue(':email', $_POST['email']);
$stmt->bindValue(':user_id', $_POST['user_id']);
$stmt->execute();//Throws the error

您在这一行上有语法错误

$stmt = $pdo->prepare('UPDATE users SET userName=:userName, name=:name, surName1:=surName1'.$strFields.' WHERE user_id=:user_id');

对于姓氏 1,等号的错误一侧有":"。 只需将其更改为此

$stmt = $pdo->prepare('UPDATE users SET userName=:userName, name=:name, surName1=:surName1'.$strFields.' WHERE user_id=:user_id');

最新更新