使用函数语法准备语句

时间:2009-10-03 22:59:36

标签: sql mysql prepared-statement

我在尝试运行时遇到错误:

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 个答案:

答案 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。