Невозможно создать подготовленные операторы в MySQL - PullRequest
0 голосов
/ 17 мая 2011

Я пытаюсь создать подготовленный оператор в MySQL, который принимает один параметр.Когда я пытаюсь сделать это в командной строке, я получаю синтаксическую ошибку.Однако, когда в моем подготовленном утверждении нет переменных, я могу их нормально создать.Ниже приведена копия и вставка того, что я вижу в командной строке MySQL:

mysql> PREPARE state_name FROM "select * from ? limit 1";

ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '?предел 1 'в строке 1

mysql> PREPARE state_name FROM "select * from documents limit 1";
Query OK, 0 rows affected (0.00 sec)
Statement prepared

Используемая версия MySQL - 5.0.77-log.

Есть ли синтаксическая ошибка, которую я не вижу?И есть ли какие-либо параметры конфигурации, которые я должен установить, чтобы заставить подготовленные операторы работать?

Ответы [ 2 ]

5 голосов
/ 17 мая 2011

Боюсь, вы не можете передавать имена таблиц как подготовленные параметры операторов, а также нельзя передавать столбцы в группы или сортировать по ним. Единственное, что вы можете параметризовать - это поля в предложениях where или для обновлений:

PREPARE state_name FROM "select * from documents where id = ?";

PREPARE state_name FROM "update documents set field = ? where id = ?";
1 голос
/ 05 января 2012

Если вы хотите создать один оператор подготовки и использовать его для нескольких таблиц, вы фактически создаете переменную для каждой таблицы, а затем создаете оператор, используя эту переменную, как MySQL manual объясни это:

mysql> USE test;
mysql> CREATE TABLE t1 (a INT NOT NULL);
mysql> INSERT INTO t1 VALUES (4), (8), (11), (32), (80);

mysql> SET @table = 't1';
mysql> SET @s = CONCAT('SELECT * FROM ', @table);

mysql> PREPARE stmt3 FROM @s;
mysql> EXECUTE stmt3;
+----+
| a  |
+----+
|  4 |
|  8 |
| 11 |
| 32 |
| 80 |
+----+

mysql> DEALLOCATE PREPARE stmt3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...