gpt4 book ai didi

使用 PDO 更新 PHP

转载 作者:行者123 更新时间:2023-11-29 11:48:58 27 4
gpt4 key购买 nike

我正在尝试构建一个自定义类来管理数据库操作。我是 OOP 的初学者,所以如果您有任何建议请告诉我。顺便说一句,我有一个更新方法,它将表的名称、要更新的字段、要更新字段的值以及要放入查询的 where 子句中的字段和值作为参数。此时,我有两个不同的数组,一个用于 set 部分,一个用于 where 部分。我像这样构建查询字符串 PDOStatement Object ( [queryString] => UPDATE Ordini SET Nome=':Nome', Cognome=': Cognome', Telefono=': Telefono' WHERE ID=':ID' )

现在我想将参数绑定(bind)到变量并执行查询,这就是问题所在。我尝试这种方式,但查询不更新字段。- 在 $values 中,我有想要绑定(bind)到 SET 部分中的变量的值- 在 $wv 中,我有想要绑定(bind)到 WHERE 部分中的变量的值- 在 $fieldsQuery 中,我有 SET 部分的占位符(例如“:Nome”)- 在 $fieldsWhere 我有 WHERE 部分的占位符

如何以正确的方式将占位符与变量绑定(bind)?

public function update($table=NULL, $fieldsQuery=NULL, $fieldsValues = NULL, $whereFields=NULL, $whereValues=NULL, $whereOperators = NULL)
{
if($fieldsQuery != NULL)
$fields = explode(",", $fieldsQuery);
if($fieldsValues != NULL)
$values = explode(",", $fieldsValues);
if($whereFields != NULL)
$wf = explode(",", $whereFields);
if($whereValues != NULL)
$wv = explode(",", $whereValues);

$fieldsQuery = array_map(function($field) { return ":$field";}, $fields);
$bindValuesSet = array_combine($fieldsQuery, $values);
//return an array in which every field is => Fieldname=':Fieldname'
$bindSetInitial = array_combine($fields, $fieldsQuery);


//transform every item in array from field to :field
$fieldsWhere = array_map(function($field) { return ":$field";}, $wf);
$bindValuesWhere = array_combine($fieldsWhere, $wv);
$bindWhereInitial = array_combine($wf, $fieldsWhere);

//implode an array mantaining both key and value
$fieldsValues = implode(', ', array_map(function ($v, $k) { return sprintf("%s='%s'", $k, $v); }, $bindSetInitial, array_keys($bindSetInitial)));
$fieldsWhere = implode(', ', array_map(function ($v, $k) { return sprintf("%s='%s'", $k, $v); }, $bindWhereInitial, array_keys($bindWhereInitial)));

$query = $this->db->prepare('UPDATE ' . $table . ' SET ' . $fieldsValues . ' WHERE ' . $fieldsWhere);

$query->bindParam(':Nome', $values[0]);
$query->bindParam(':Cognome', $values[1]);
$query->bindParam(':Telefono', $values[2]);
$query->bindParam(':ID', $wv[0], PDO::PARAM_INT);

$query->execute();
print_r($query->debugDumpParams());
}

最佳答案

':Nome' 不是准备好的语句的占位符。它只是一个字符串 ':Nome'

占位符为 :Nome (不带 `)且不带任何空格、制表符等。IE。 :Nome不是占位符

所以,您的查询应该是:

UPDATE Ordini SET Nome=:Nome, Cognome=:Cognome, Telefono=:Telefono WHERE ID=:ID

感谢@Fred-ii- - 阅读error handling section of PDO

关于使用 PDO 更新 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34481642/

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