问题:是否可以使用变量作为表名而不必使用字符串构造函数来执行此操作?
信息:
我正在开展一个项目,目的是对我的星模拟数据进行编目.为此,我将所有数据加载到sqlite数据库中.它工作得很好,但我决定为我的数据库增加更多的灵活性,效率和可用性.我计划稍后在模拟中添加小行星,并希望每个星都有一个表格.这样我就不必在每个太阳系中查询一个20m的某些小行星的表格.
我被告知使用字符串构造函数很糟糕,因为它让我容易受到SQL注入攻击.虽然这不是什么大问题,因为我是唯一可以访问这些dbs的人,但我想遵循最佳实践.而且这种方式如果我做一个类似的情况,它向公众开放,我知道该怎么做.
目前我这样做:
cursor.execute("CREATE TABLE StarFrame"+self.name+" (etc etc)")
Run Code Online (Sandbox Code Playgroud)
这有效,但我想做更多的事情:
cursor.execute("CREATE TABLE StarFrame(?) (etc etc)",self.name)
Run Code Online (Sandbox Code Playgroud)
虽然我明白这可能是不可能的.虽然我愿意接受类似的东西
cursor.execute("CREATE TABLE (?) (etc etc)",self.name)
Run Code Online (Sandbox Code Playgroud)
如果这根本不可能,我会接受这个答案,但如果有人知道如何做到这一点,请告诉我.:)
我在python中编码.
我正在通过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;
Run Code Online (Sandbox Code Playgroud)
不起作用(":"表中的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;
Run Code Online (Sandbox Code Playgroud) 正如标题所示,我想知道这段代码是否容易受到SQL注入攻击?如果是这样,是否有更好,更安全的方式来实现同样的目标?
def add(table,*args):
statement="INSERT INTO %s VALUES %s" % (table,args)
cursor.execute(statement)
Run Code Online (Sandbox Code Playgroud)