我有一个数组,其中包含多个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));
}
即使这样也不行。发生了什么?我错过了什么?
谢谢
你可以这样做,希望它有帮助。
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));
}