mysql-在存储函数/过程参数列表中是否使用“`”字符的区别

4ngedf3f  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(251)

下面是mysql community server 8.0.11版的两个存储过程。我见过一些使用后引号第一种方式编写的存储过程:`,参数列表和查询语句中的字符。但是,我也看到过类似于第二个查询的查询,其中没有后引号字符。
哪种方法是最佳实践?他们有什么安全分歧吗?如果在存储过程中使用后引号字符,它们是否更容易受到sql注入攻击?

CREATE PROCEDURE `procedure`(IN `in_data` VARCHAR(100))
BEGIN
    SELECT COUNT(*) FROM `table_name` WHERE `data` = `in_data`;
END

或:

CREATE PROCEDURE `procedure`(IN in_data VARCHAR(100))
BEGIN
    SELECT COUNT(*) FROM table_name WHERE data = in_data;
END

希望我说得够清楚,谢谢你抽出时间。

lh80um4z

lh80um4z1#

只要您的过程没有使用 PREPARE 以及 EXECUTE ,查询是固定的,它们不易受到sql注入的攻击。
后面的记号用于分隔标识符(表名、列名、过程名等),以允许您使用非法标识符,因为这些标识符包含标点、空格或国际字符,或者与sql保留字冲突。
例如,请参阅我对这个问题的回答:不同的数据库使用不同的名称引用吗?

相关问题