我正在通过 Flex 在 AIR 中开发一个应用程序,但我没有发现 SQLite 出了什么问题(我习惯了 MySQL)。参数有效,但仅在某些情况下有效。这是内置的针对sql注入的卫生系统的一部分吗?谢谢你的帮助!
Works:
sqlite
“INSERT :Fields FROM Category”,其中参数为 :Fields = "*"
as3
var statement:SQLStatement = new SQLStatement();
statement.connection = connection;
statement.text = "INSERT :Fields FROM Category";
statement.parameters[":Fields"] = "*";
statement.execute;
不起作用(“:Table”处的 SQL 语法错误):
sqlite
“INSERT :Fields FROM :Table”,其中参数为 :Fields = "*" 和 :Table = "Category"
as3
var statement:SQLStatement = new SQLStatement();
statement.connection = connection;
statement.text = "INSERT :Fields FROM :Table";
statement.parameters[":Fields"] = "*";
statement.parameters[":Table"] = "Category";
statement.execute;
一般来说,不能使用 SQL 参数/占位符数据库标识符(表、列、视图、模式等)或数据库函数(例如,CURRENT_DATE
),但仅用于绑定文字values.
通过服务器端对参数化(也称为准备好的)语句的支持,数据库引擎会解析您的查询一次,并记住您将在后续执行中绑定的任何参数的特性(它们的类型、最大长度、精度等)已经解析的查询。但是,如果关键位(例如数据库对象)未知,则无法将查询正确解析为其语法元素。
因此,人们通常必须在存储过程或动态连接/插值/无论要正确执行的 SQL 语句中动态连接/插入/什么的客户端代码中自行替换表名。无论如何,请记住使用 SQL API 的函数引用数据库标识符,因为 API 不会为您做这件事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)