MySQL:使用prepare命令命名参数?

Ric*_*cou 9 mysql parameters prepared-statement

是否可以在MySql中使用带有命名参数prepare命令,例如PHP中的PDO:

这是我的例子:

 SET @s = 'SELECT * FROM MY_TABLE WHERE my_column_1 = ? AND my_column_2 = ? ';
 PREPARE stmt2 FROM @s;
 SET @a = 54;
 SET @b = 89';
 EXECUTE stmt2 USING @a, @b;
Run Code Online (Sandbox Code Playgroud)

有可能做这样的事情:

 SET @s = 'SELECT * FROM MY_TABLE WHERE my_column_1 = :value1 AND my_column_2 = :value2 ';
Run Code Online (Sandbox Code Playgroud)

scr*_*gar 3

我建议查看有关此的文档。 https://dev.mysql.com/doc/refman/8.0/en/prepare.html

该文档没有提及除?s 之外的任何其他绑定变量的方法,但它确实提到您可以使用用户定义的变量。

SET @s = 'SELECT * FROM MY_TABLE WHERE my_column_1 = @a AND my_column_2 = @b ';
PREPARE stmt2 FROM @s;
SET @a = 54;
SET @b = 89';
EXECUTE stmt2;
Run Code Online (Sandbox Code Playgroud)

产生相同的输出,并且仅在执行语句时评估变量,它只是缺乏将变量绑定到查询的显式性。

  • 我不清楚这是否有“性能”影响。谷歌搜索,但没有找到任何关于使用“@a”是否会像“?”和“USING”那样创建一个优化良好的查询的讨论。 (2认同)