ПОЖАЛУЙСТА, ВНИМАТЕЛЬНО ПРОЧИТАЙТЕ ВОПРОС. Это не обычно глупо "мой код не работает !!!" вопрос.
Когда я запускаю этот код с предполагаемой ошибкой
try {
$sth = $dbh->prepare("SELECT id FROM users WHERE name INN(?,?) ");
$sth->execute(array("I'm","d'Artagnan"));
} catch (PDOException $e) {
echo $e->getMessage();
}
Я получаю это сообщение об ошибке
У вас есть ошибка в синтаксисе SQL ... рядом с INN ('I \' m ',' d \ 'Artagnan') 'в строке 1
Но я годами думал, что запрос и данные отправляются на сервер отдельно и никогда не мешают. Таким образом, у меня есть несколько вопросов (хотя я сомневаюсь, что кто-то получил ответ ...)
- Откуда он получает такое знакомое строковое представление - в кавычках и экранированный? Это сделано специально для сообщения об ошибке или это часть фактического запроса?
- Как это работает в реальности? Заменяет ли он заполнитель данными или нет?
- Есть ли способ получить весь запрос, а не только его часть, для целей отладки?
Обновление
mysqli
делает это как положено: выдает ошибку говорит near 'INN(?,?)'