Подготовленные заявления с синтаксисом функций - PullRequest
0 голосов
/ 04 октября 2009

Я получаю сообщение об ошибке при попытке запустить это:

mysql> prepare stmt1 from "UPDATE test.users SET password = password('?') WHERE usrid = ?";
mysql> prepare stmt1 from "UPDATE test.users SET password = password(?) WHERE usrid = ?";

Как сделать подготовленное утверждение, в котором функция принимает переменную в качестве аргумента?

Ответы [ 2 ]

2 голосов
/ 04 октября 2009

Вы должны добавить несколько двойных кавычек вокруг вашего подготовленного утверждения:

mysql> PREPARE stmt_name FROM "SELECT name FROM Country WHERE code = ?";
Query OK, 0 rows affected (0.09 sec)
Statement prepared

mysql> SET @test_parm = "FIN";
Query OK, 0 rows affected (0.00 sec)

mysql> EXECUTE stmt_name USING @test_parm;
+---------+
| name    |
+---------+
| Finland |
+---------+
1 row in set (0.03 sec)

mysql> DEALLOCATE PREPARE stmt_name;
Query OK, 0 rows affected (0.00 sec)
0 голосов
/ 04 октября 2009

Теперь, когда грубая синтаксическая ошибка (пропущенные кавычки вокруг подготовленной строки) исправлена, вопрос разрешается, как мне кажется, «как получить аргумент в функцию в подготовленном выражении».

В первом примере передается строка пароля '?' к функции пароля - это, вероятно, не , что вы имели в виду. Во втором примере передается первое значение, данное оператору при его выполнении, функции пароля, а второе значение используется для идентификации соответствующего usrid.

Это предполагает стандартную интерпретацию SQL - я не знаю причин думать, что она не будет применима и к MySQL.

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