Я новичок в PDO, и я сделал несколько поисков по проблеме, с которой я столкнулся, и я не смог найти ответы на это. Как вы можете видеть ниже, у меня есть эта функция:УДАЛИТЬ несколько строк в PDO
function deleteInfo($id){
$pdo = connPDO();
$deleteInfo = $pdo -> prepare("DELETE FROM game_locais_zumbis WHERE id_zumbi IN (:id)");
$deleteInfo -> bindValue(":id", $id, PDO::PARAM_STR);
$deleteInfo -> execute();
$pdo = null;
}
После этого у меня есть следующий код:
while($row = $listInfo -> fetch(PDO::FETCH_ASSOC)){
$ids[] = $row['ids'];
}
$ids = implode(',', $ids);
deleteInfo($ids);
Когда я повторяю свои $ идентификаторы, я получаю:
1,2,3,4,5
Но функция DELETE не удаляет все эти пять строк в моем db, но только первый, как «1». Когда я запускаю ту же самую функцию DELETE в моем db, заменяя «: id» на «1,2,3,4,5», он работает! Кто-нибудь знает, в чем моя ошибка? Я ценю любую помощь.
При использовании привязки вары с помощью оператора IN, каждая запись должна быть отдельной переменной связывания .... вы пытаетесь УДАЛИТЬ где 'id_zumbi IN ('1, 2,3,4,5 ') '(обратите внимание на цитаты, которые' bindValue() 'обертывает вокруг строки) –
Тот факт, что вы извлекаете эти идентификаторы из' $ row [' ids '] ', предполагает, что вы получая их от запроса. Если это не та же самая таблица, которая была первоначально запрошена, вы можете просто объединить ее с подзапросом как: 'DELETE FROM game_locais_zumbis WHERE id_zumbi IN (SELECT id FROM othertable WHERE somecondition = true)' –
Я не знал, что привязывать vars котировки. Интересно! Я попробую обходной путь для этого. Благодаря! – user3854140