sorry_i_noob
@sorry_i_noob

Почему два одинаковых запроса PDO возвращают разные результаты (один запрос подготовленный, а другой — обычный)?

Здравствуйте!

$ids_array = array(104, 106);
// ----------------
$comments_1 = [];
$stmt = $pdo->prepare("SELECT * FROM comments WHERE id IN (:ids) ORDER BY id DESC");
$stmt->execute(array(':ids' => implode(',', $ids_array)));
while ($row = $stmt->fetch()) {
	$comments_1[] = $row;
}
// ----------------
$comments_2 = [];
$rows = $pdo->query("SELECT * FROM comments WHERE id IN (" . implode(',', $ids_array) . ") ORDER BY id DESC");
while ($row = $rows->fetch()) {
	$comments_2[] = $row;
}

В итоге $comments_1 содержит 1 элемент, а $comments_2 - 2. Почему так?
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
DevMan
@DevMan
потому что в первом варианте ты получаешь
SELECT * FROM comments WHERE id IN ("104, 106") ORDER BY id DESC
что кагбе не имеет никакого смысла.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@cybernoob
Подготовленные запросы с IN на сколько я помню не работают, их только по второму варианту можно сразу в строку
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Потому что это разные запросы. Соответственно:
WHERE id IN ('104,106')
WHERE id IN (104,106)

Первый из-за мягкой системы типов mysql тихо превращается во что-нибудь интересное вроде id = 104 с незаметным варнингом от парсера mysql
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы