【发布时间】:2014-06-02 19:16:54
【问题描述】:
我正在构建一个严重依赖数据库的网络应用程序。这是我经常使用的查询类型的示例:
CREATE TABLE item$userenteredname$username
基本上每次创建新项目时,都会有一个表格存储每次添加内容的信息。所以我需要表名保持不变。
我最近花了很长时间更新我的代码以使用 PDO。我了解如何准备语句和绑定值,但您不能使用表名来执行此操作。无法找到我的问题的正确答案,需要澄清的是......
当我因为变量在表名中而无法使用 prepare 或 mysql_real_escape_string 时,如何清理用户输入以防止 sql 注入?
【问题讨论】:
-
这是一个愚蠢的设计。最好花一些时间创建适当的架构,而不是处理数千张表
-
如果你有超变量表名,那么你的数据库设计是错误的。
-
去这个链接你会得到想法stackoverflow.com/questions/60174/…
-
@Shurik,可能是这样,但你可以更有建设性一点——我们都必须在某个时候学习。 user1973975,Shurik 的观点是您的架构可能是错误的。如果您为每个用户存储自定义数据,请考虑使用两表架构,其中一个提供键(或自定义列名),另一个存储值(用户自定义数据 - 特定于键)。
-
好的,我认为你们有一个很好的观点。基本上这是我编写的第一件事,我才刚刚开始,我想做的就是完成一个项目。该应用程序已完成并正在运行,但现在我正在添加安全性,所以我只是不顾一切地完成它。下次我会更仔细地设计数据库。