gpt4 book ai didi

php - PDO 更新函数为每一列设置相同的值 - 循环错误

转载 作者:行者123 更新时间:2023-11-29 00:33:49 25 4
gpt4 key购买 nike

由于某些原因,当我将以下值传递给我的数据库记录更新函数时,我无法计算出它为每一列设置了相同的值。

这是我传递给它的数据:

  $_values = array(
'client_fname' => $_POST['client_fname'],
'client_lname' => $_POST['client_lname'],
'client_email' => $_POST['client_email']
);
$_args= array('client_id' => $_id);
$db->dbUpdate('client', $_values, $_args)

它将每一列(client_fname、client_lname、client_email)更新为 $_id 值,而不是发布的值。而且我不知道我做错了什么:(

这是它在绑定(bind)参数之前创建的查询:

 UPDATE client SET client_fname=:0, client_lname=:1, client_email=:2 WHERE client_id=:w0

这是函数

 public function dbUpdate($_table, $_values, $_args) { //TODO: Fix Function
try {
$query = 'UPDATE '.$_table.' SET ';
$i = 0; foreach ($_values as $_field => $_value) {
if($i == 0) {
$query .= $_field.'=:'.$i;
} else {
$query .= ', '.$_field.'=:'.$i;
}
$i++;
}
$query .= ' WHERE ';
$i = 0; foreach ($_args as $_field => $_value) {
if($i == 0) {
$query .= $_field.'=:w'.$i;
} else {
$query .= ', '.$_field.'=:w'.$i;
}
$i++;
}

$sql = $this->db->prepare($query);
$i = 0; foreach ($_values as $_field => $_value) {
$sql->bindParam(':'.$i, $_value); $i++;
}
$i = 0; foreach ($_args as $_field => $_value) {
$sql->bindParam(':w'.$i, $_value); $i++;
}

if($sql->execute()) {
return true;
} else {
return false;
}
}
catch (PDOException $e) {
print_r($e->errorInfo);
die();
}
}

最佳答案

我之前已经回答过几次了,所以我会链接到我之前的回答。

简而言之,bindParam 需要引用。它将变量而不是值绑定(bind)到语句。由于 foreach 循环中的变量在每次迭代开始时被重置,因此只有最后一个引用保持不变,您最终将所有占位符绑定(bind)到它。

详细解释在这里:PDO bindParam issue .

关于php - PDO 更新函数为每一列设置相同的值 - 循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15293884/

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