当前位置:  开发笔记 > 编程语言 > 正文

SQLite参数 - 不允许tablename作为参数

如何解决《SQLite参数-不允许tablename作为参数》经验,为你挑选了1个好方法。

我正在通过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不会为您执行此操作.



1> pilcrow..:

通常,不能将SQL参数/占位符用于数据库标识符(表,列,视图,模式等)或数据库函数(例如CURRENT_DATE),而是仅用于绑定文字.

通过服务器端支持参数化(又称准备)语句,数据库引擎会解析您的查询一次,记住任何参数的特征 - 它们的类型,最大长度,精度等 - 您将在后续执行中绑定已解析的查询.但是,如果关键位(如数据库对象)未知,则无法将查询正确地解析为其语法元素.

因此,通常必须在存储过程或客户端代码中自己替换表名,动态地连接/插入/淡化要正确执行的SQL语句.在任何情况下,请记住使用SQL API的函数来引用数据库标识符,因为API不会为您执行此操作.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有