PHP PDO foreach问题

时间:2017-01-04 15:41:18

标签: php mysql for-loop pdo

所以我有一个更新数据库中2列的php函数。它看起来像这样:

$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]]);
}

1 个答案:

答案 0 :(得分:5)

bindParam绑定到一个变量,这就是为什么两个字段都设置为相同的值($stmt->bindValue(":" . $key, $value); 的最后一个值)的原因。您应该使用bindValue代替:

$value

在您的代码中,PDO会记住它需要使用:firstname:lastname的{​​{1}}变量。在语句执行时,$valueDunno,因此两个字段都获得此值。如果您使用bindValue,PDO不会记住使用的变量,而是它的值,这就是您所需要的。