Php 从关联数组动态构造update语句
我正在尝试基于关联数组创建一个动态构造的UPDATE语句,如下所示:Php 从关联数组动态构造update语句,php,string,associative-array,implode,Php,String,Associative Array,Implode,我正在尝试基于关联数组创建一个动态构造的UPDATE语句,如下所示: $lastid = $app['database']->dynamicUpdate('table', [ 'name' => $name, 'ticket' => $ticket, ], $id); DynamicCupDate函数: public function dynamicUpdate($table, $parameters, $id) { $query = sprintf(
$lastid = $app['database']->dynamicUpdate('table', [
'name' => $name,
'ticket' => $ticket,
], $id);
DynamicCupDate函数:
public function dynamicUpdate($table, $parameters, $id)
{
$query = sprintf('UPDATE %s SET (%s) WHERE id = %s', $table, implode(', ', array_keys($parameters).'= :'.array_keys($parameters)), $id);
$statement = $this->pdo->prepare($query);
$statement->execute($parameters);
return $this->pdo->lastInsertId();
}
但是,当我简单地回显$query变量(删除了dynamicUpdate中的所有其他代码)时,它返回以下错误:
警告:内爆():传入的参数无效
第21行的EditProduct.php更新表
SET(),其中id=10
您只能内爆单个数组,而不能像同时尝试的那样操作内容。foreach可以轻松构建您所需的部件
$set = "";
foreach ( $parameters as $name=>$param) {
$set .= $name."= :".$name.",";
}
$set=rtrim($set,",");
$parameters["keyID"] = $id;
$query = "UPDATE $table SET $set WHERE id = :keyID";
为了以防万一,还值得将ID放入绑定参数的数组中,并为其包含一些伪名称。内爆的第二个参数必须是数组 这个实现查询的解决方案怎么样
$query = sprintf('UPDATE %s SET ', $table);
foreach($parameters as $key=>$value)
$query .= "$key=:$key, ";
$query = rtrim($query,", ");
$query .= sprintf('WHERE id = %s', $id);
内爆需要一个数组作为第二个参数,传递字符串。数组键返回强制进行数组到字符串转换的数组。内爆的第二个参数应该是数组。您有
array\u键($parameters)。“=:”。array\u键($parameters)
。不能连接数组。这是否也会导致WHERE子句前面出现keyID=:keyID
?我在构建要设置的值列表后将其添加进来。