PHP PDO foreach 问题

标签 php mysql for-loop pdo

所以我有一个 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 变量。在语句执行时,$valueDunno,所以两个字段都得到这个值。如果您使用 bindValue,PDO 不会记住所使用的变量,而是它的值,而这正是您所需要的。

关于PHP PDO foreach 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41467727/

相关文章:

php - 如果在调用 msql_insert_id() 之前发生另一个 autoIncrement ,它会给出错误的结果吗?

php - SQL排除某些行

ios - 二元运算符 '+' 不能应用于类型 'Double' 和 'Element' (又名 'AnyObject' )的操作数

结果可以在不同列中的最后 x 个结果的 MySQL sum avg

mysql - 启用mysql查询日志导致错误

java - Stringbuilder 无法正常工作

java - Java 中使用 for 语句的斐波那契数列

php - Composer 更新花费很多时间

php - 使用 cURL 的 Mandrill CA SSL 错误

mysql - 将csv文件导入mysql