Я уже много лет использую ADOdb в качестве уровня абстракции базы данных и кэширования запросов.В последнее время я переключился на подготовленные заявления, в основном для обеспечения безопасности, и мне стало любопытно, как они реализуются (или не применяются).
Цитата из документации по методу Prepare : « Возвращает массив, содержащий исходную инструкцию sql в первом элементе массива;остальные элементы массива зависят от драйвера.Если есть ошибка или мы эмулируем Prepare (), мы возвращаем исходную строку $ sql. ”
Проверка переменной оператора с помощью:
$stmt = $db->Prepare("SELECT * FROM pages WHERE id = ?");
print_r($stmt);
При открытых соединенияхс параметром «mysql» или «mysqli» возвращается только исходная строка запроса - я думаю, подготовленный оператор эмулируется.Соединение, открытое с помощью pdo_mysql, возвращает (из print_r ()):
Array (
[0] => SELECT * FROM pages WHERE id = ?
[1] => PDOStatement Object ([queryString]=>SELECT * FROM pages WHERE id = ?)
)
Могу ли я принять это как определенное доказательство реального подготовленного утверждения?Если нет, кто-нибудь знает быстрый и грязный способ проверки на стороне сервера (что-то искать в журнале запросов, или, возможно, в MySQLProxy)?Я пытался прочитать исходники библиотеки, но заблудился на полпути ...