所以我有一个 php 函数可以更新数据库中的 2 列。它看起来像这样:
$fields = array("firstname" => "Joe", "lastname" = "Dunno");
$stmt = $connection->prepare("UPDATE users SET firstname = :firstname, lastname = :lastname WHERE user_id = :user_id");
foreach ($fields as $key => $value)
{
$stmt->bindParam(":" . $key, $value);
}
$stmt->bindParam(":user_id", $user_id);
然而,当我出于某种原因执行该语句时,它喜欢将名字和姓氏都更新为 Dunno,而不是 Joe 和 Dunno。
我尝试回显 $key
和 $value
并正确打印出来。
出于某种奇怪的原因,如果我使用这个 for 循环,它会正常工作。
for ($fieldsKeys = array_keys($fields), $x = 0; $x < count($fields); $x++)
{
$stmt->bindParam(":" . $fieldsKeys[$x], $fields[$fieldsKeys[$x]]);
}
最佳答案
bindParam
绑定(bind)到一个变量,这就是为什么两个字段都设置为相同的值($value
的最后一个值)。你应该使用 bindValue
相反:
$stmt->bindValue(":" . $key, $value);
在您的代码中,PDO 记住它需要为 :firstname
和 :lastname
使用 $value
变量。在语句执行时,$value
是 Dunno
,所以两个字段都得到这个值。如果您使用 bindValue
,PDO 不会记住所使用的变量,而是它的值,而这正是您所需要的。
关于PHP PDO foreach 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41467727/