Php 从关联数组动态构造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(

我正在尝试基于关联数组创建一个动态构造的UPDATE语句,如下所示:

$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
?我在构建要设置的值列表后将其添加进来。