我有一个包含多个ID的数组,我需要更新多个列。我正在使用MySQL IN()
。问题是,当我使用下面的查询时,它完全正常。
public function available($value, $propertyId = array()) {
$sth = $this->dbh->prepare('UPDATE properties p SET p.status = :status WHERE p.id IN('.implode(',',$propertyId).')');
$sth->bindParam(':status',$value);
return $sth->execute();
}
由于上面的查询没有使用第二个参数$propertyId
的任何占位符,我认为这是错误的方法。但是当我在查询中使用命名或未命名的占位符时,它只会更新1行。例如,以下代码仅更新一行。
//This will update only one row.
//Using Named Place Holder
public function available($value, $propertyId = array()) {
$sth = $this->dbh->prepare('UPDATE properties p SET p.status = :status WHERE p.id IN(:propertyId)');
$sth->bindParam(':status',$value);
$sth->bindParam(':propertyId', implode(',', $propertyId));
return $sth->execute();
}
或
//Using Unnamed Place Holder.
public function available($value, $propertyId = array()) {
$sth = $this->dbh->prepare('UPDATE properties p SET p.status = ? WHERE p.id IN(?)');
return $sth->execute(array($value, implode(',', $propertyId)));
}
我尝试将数组转换为字符串并将其分配给变量,如下所示。
public function available($value, $propertyId = array()) {
$id = implode(',', $propertyId);
$sth = $this->dbh->prepare('UPDATE properties p SET p.status = ? WHERE p.id IN(?)');
return $sth->execute(array($value, $id));
}
即使这样也行不通。怎么了?我错过了什么?
谢谢
答案 0 :(得分:0)
你可以做这样的事情,希望它有所帮助。
public function available($value, $propertyId = array()) {
$id_placeholders = implode(',', array_fill(0, count($propertyId), '?'));
$sth = $this->dbh->prepare('UPDATE properties p SET p.status = ? WHERE p.id IN('.$id_placeholders.')');
return $sth->execute(array_merage(array($value), $propertyId));
}