我在尝试运行时遇到错误:
mysql> prepare stmt1 from "UPDATE test.users SET password = password('?') WHERE usrid = ?";
mysql> prepare stmt1 from "UPDATE test.users SET password = password(?) WHERE usrid = ?";
如何在函数将变量作为参数的情况下编写一个准备好的语句?
答案 0 :(得分:2)
您需要在准备好的声明周围添加一些双引号:
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)
答案 1 :(得分:0)
现在修复了粗略的语法错误(在准备好的字符串周围缺少引号),问题解决为“如何在预准备语句中为函数获取参数”,我相信。
第一个示例传递密码字符串'?'到密码功能 - 它可能不你的想法。第二个示例将执行时给予语句的第一个值传递给密码函数,第二个值用于标识相关的usrid
。
这假设对SQL的标准解释 - 我知道没有理由认为它也不适用于MySQL。