首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用用户定义的名称和数据类型通过PHP / PDO向现有表添加/删除MySQL列。

使用用户定义的名称和数据类型通过PHP / PDO向现有表添加/删除MySQL列。
EN

Stack Overflow用户
提问于 2012-12-18 08:45:39
回答 3查看 2.5K关注 0票数 3

我希望我的PHP web应用程序的用户能够插入一些表中的列,而不需要具有SQL知识的人。最好的方法是什么,显然SQL注入和id-10-t错误是一个令人担忧的问题。

我能不能用

代码语言:javascript
复制
sql = 'ALTER TABLE table_name ADD ? ?'

然后以字符串的形式传入'new_col‘和'varchar(100)’?或者这超出了PDO的能力范围?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-18 10:11:43

不幸的是,您不能将ALTER TABLE语句中的列名或属性与PDO参数绑定。相反,为了防止SQL注入,我建议根据仅允许字母、数字和下划线的正则表达式来验证列名,并确保在语句中对列名进行反引号。

代码语言:javascript
复制
if (!preg_match('/^[a-z0-9_]+$/i', $column_name)) {
  // Fail!!! submitted column name doesn't match regex
}

  • ^ = string
  • [a-z0-9_]+的开头=一个或多个字母、数字,underscore
  • $ = string
  • /i的结尾= case-insensitive

接下来,为了验证列的数据类型,您应该只允许一组特定的选项,并使用数组验证它们。这称为白名单。

代码语言:javascript
复制
// Allowed types:
$acceptable_types = array('VARCHAR(200)', 'VARCHAR(10)', 'INT', 'FLOAT', 'etc...');
if (!in_array($column_data_type, $acceptable_types)) {
  // Fail!!! Invalid type submitted
}

以上选项最好通过类似<select>列表的方式提供。您还可以指定额外的选项,如NULL / NOT NULL,作为构建ALTER TABLE语句的复选框输入。

代码语言:javascript
复制
// Only after everything is successfully validated:
$sql = "ALTER TABLE `tablename` ADD `$valid_column_name` $valid_column_datatype $NULL_option";
票数 1
EN

Stack Overflow用户

发布于 2014-02-05 05:16:37

您可能需要考虑为其他列使用元表。

如果您为每种汽车设置了数据(如路缘重量、高度等),然后用户添加了其他特定信息,但这些信息并不适用于每辆汽车,则可以将其存储在单独的表中,如下所示:

车表: id name curb_weight height ...

元表: id (主键) car_id (外键) data_name data_value

Meta表与Car表具有一对多关系。如果用户想要为两辆特定的汽车添加一个列,以记录"size of mirror“或其他信息,Meta表将获得两条记录,分别是自动id、汽车id、”size of Mirror“和大小。

如果想要一组数据名列表,可以使用第三个表,并让元表存储id、car_id和data_id。

这只是一个想法!

票数 0
EN

Stack Overflow用户

发布于 2012-12-18 13:34:07

要允许用户在某些表中插入列,最好的方法显然是,而不是。特别是不需要具有SQL知识的人。

这是违反所有规则的。

将这样一个相当基本的问题与极其不同寻常的目标结合在一起,总是有一种糟糕设计的味道。

因此,正确的答案应该是:

  1. 放弃了用户添加列的想法。这真的很奇怪。
  2. 开始另一个问题,解释你的总体目标,描述用例,并询问适当的解决方案。
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13924689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档