PDO ATTR_EMULATE_PREPARES = false, SHOW TABLES LIKE и синтаксическая ошибка

212
08 марта 2017, 18:27

Вот такая ошибка

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

возникает при попытке подготовить запрос вида

SHOW TABLES LIKE :1

при отключении эмуляции подготавливаемых запросов в коде

$conn = new PDO('mysql:dbname=testdb;host=127.0.0.1;charset=utf8', 'root', 'root', [
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    ]);
$sth = $conn->prepare('SHOW TABLES LIKE :1'); <-- тут ошибка
$sth->execute([':1' => 'test']);
var_dump($sth->fetchAll());

PHP 7.0.4 и 5.6.13
MySQL 5.6.20
Windows 7 :)

Вопрос: Что делать? Это мой локальный глюк или PDO глобально кривой?

UPD С запросом вида

SHOW COLUMNS FROM `test` LIKE ?

аналогичная ситуация.

Answer 1

mysql> prepare stmt1 from 'show tables like ?';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

Сдаётся мне, что prepared statements в mysql в принципе не могут обрабатывать запросы show tables.

Точно, об этом упомянуто в мануале. В mysql разрешено подготавливать только определённый список выражений, SHOW TABLES и SHOW COLUMNS в список поддерживаемых выражений не входят. А эмуляция подготовленных выражений, соответственно, успешно это ограничение скрывает.

Используйте запросы к псевдотаблицам служебной базы INFORMATION_SCHEMA:

SELECT 
  TABLE_NAME
FROM    
  INFORMATION_SCHEMA.TABLES    
WHERE    
  table_schema = DATABASE() AND    
  table_name LIKE ?;
READ ALSO
Как добавить исключение в SQL запрос?

Как добавить исключение в SQL запрос?

Здравствуйте, у меня есть SQL запрос, который связывает 2 таблицы Нужно сделать ограничение на вывод, то есть если orderspaid = 1 тогда выводим, как...

330
Вывод токена на экран

Вывод токена на экран

Не могу разобраться с выводом токена на экран, подскажите, пожалуйста, где ошибка:

367
Вывод иерархии папки

Вывод иерархии папки

Есть задача:

444
Как установить layout в JavaFx?

Как установить layout в JavaFx?

Закончил изучать swing и решил попробовать javaFx, буквально с самого начала у меня появилась проблемаКак можно установить layout в JavaFX? (на данный...

397