【发布时间】:2020-06-07 10:02:00
【问题描述】:
在过去的一个小时里,我一直在与这个问题作斗争,我正要跳出窗外。我正在尝试使用可变数量的参数进行更新查询:数据将来自表单,但某些字段(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
【问题讨论】:
-
输出查询文本,看看有什么问题。
-
有一个错字surname1:=surName1 — 冒号应该在等号之后
-
只是不要使用命名占位符。他们太混乱了
-
@YourCommonSense 不是防止 SQL 注入的好习惯吗?
-
我说的是 named 占位符。虽然也有positional 的。只是问号,你永远不会混淆在哪里放置冒号