我正在使用MySQL数据库为每个“数据对象”存储单独的表,并使用PDO进行访问。表的名称存储在另一个数据库/表中,因此必须插入到任何抽象函数中才能写入正确的表,顺便说一下,写入特定的列/行。在经历了很多挫折并且未能阅读整个文档页面后,我发现在使用PDO预处理语句时,表名和列名不能被绑定。该死。从那时起,我理解为什么变量在准备期间不能用于这些字段(我也可以),现在是解决方法的时候了。我知道准备好的语句现在是用于防止一阶SQL注入的公认PHP标准。我的问题:
SO上有太多不同的答案从不可能到其他答案(见下面的链接),所以我想确保并在实施之前选择最安全的方法,由一些有安全意识的人来运行它。解决方法使用INFORMATION_SCHEME,全局变量或反引号?鲁克?
MySQL Stored Functions - Dynamic/Variable Table & Column Names
或
creating mysql tables with variable table names
或
Use of wildcards in mysql table name
注意:我知道动态表名称被视为设计不佳,但我认为这只是半动态的,因为表名只有在验证和修改后才会永久存储在另一个表字段中,然后用作参考。
答案 0 :(得分:1)
我正在使用MySQL数据库为每个“数据对象”存储单独的表,并使用PDO进行访问。
这就是你做错了。所以,只是
这不是安全漏洞,而是违反基本数据库设计规则。
请为什么不先学习正确的方法?将对象存储在单个表中是可以的。你不会遇到任何问题。然而它会给你带来很多麻烦,比你现在遇到的这个愚蠢的问题更糟糕。