"Joe", "lastname" = "Dunno"); $st-6ren">
gpt4 book ai didi

PHP PDO foreach 问题

转载 作者:行者123 更新时间:2023-11-29 04:16:40 25 4
gpt4 key购买 nike

所以我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com