我正在尝试基于如下所示的关联数组创建动态构造的UPDATE语句:
$lastid = $app['database']->dynamicUpdate('table', [
'name' => $name,
'ticket' => $ticket,
], $id);
dynamicUpdate函数:
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内部的所有其他代码)时,它返回以下错误:
警告:implode():传入的参数无效 第21行的UPDATE表中的EditProduct.php SET()ID = 10的
答案 0 :(得分:0)
您只能内嵌单个数组,而不能像尝试同时操作那样操作内容。 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放入用于绑定参数的数组中,以防万一,并为其包含一些虚拟名称。
答案 1 :(得分:0)
内爆的第二个参数必须是数组
实现查询的解决方案有什么
$query = sprintf('UPDATE %s SET ', $table);
foreach($parameters as $key=>$value)
$query .= "$key=:$key, ";
$query = rtrim($query,", ");
$query .= sprintf('WHERE id = %s', $id);