У меня есть массив, который содержит несколько идентификаторов, и мне нужно обновить несколько столбцов.Я использую 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));
}
даже это не сработает.что происходит?что мне не хватает?
спасибо