我正在通过Flex在AIR中开发一个应用程序,但我没有看到我在哪里遇到SQLite(我已经习惯了MySQL).参数有效,但仅限于某些情况.这部分是针对sql注入的内置卫生系统吗?谢谢你的帮助!
作品:
源码
"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;
不起作用(":"表中的SQL语法错误):
源码
"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;
pilcrow.. 33
通常,不能将SQL参数/占位符用于数据库标识符(表,列,视图,模式等)或数据库函数(例如CURRENT_DATE
),而是仅用于绑定文字值.
通过服务器端支持参数化(又称准备)语句,数据库引擎会解析您的查询一次,记住任何参数的特征 - 它们的类型,最大长度,精度等 - 您将在后续执行中绑定已解析的查询.但是,如果关键位(如数据库对象)未知,则无法将查询正确地解析为其语法元素.
因此,通常必须在存储过程或客户端代码中自己替换表名,动态地连接/插入/淡化要正确执行的SQL语句.在任何情况下,请记住使用SQL API的函数来引用数据库标识符,因为API不会为您执行此操作.
通常,不能将SQL参数/占位符用于数据库标识符(表,列,视图,模式等)或数据库函数(例如CURRENT_DATE
),而是仅用于绑定文字值.
通过服务器端支持参数化(又称准备)语句,数据库引擎会解析您的查询一次,记住任何参数的特征 - 它们的类型,最大长度,精度等 - 您将在后续执行中绑定已解析的查询.但是,如果关键位(如数据库对象)未知,则无法将查询正确地解析为其语法元素.
因此,通常必须在存储过程或客户端代码中自己替换表名,动态地连接/插入/淡化要正确执行的SQL语句.在任何情况下,请记住使用SQL API的函数来引用数据库标识符,因为API不会为您执行此操作.