gpt4 book ai didi

php - 通过 PHP/PDO 使用用户定义的名称和数据类型将 MySQL 列添加/删除到现有表

转载 作者:行者123 更新时间:2023-11-29 01:05:33 25 4
gpt4 key购买 nike

我希望我的 PHP 网络应用程序的用户能够将列插入到某些表中,而无需具备 SQL 知识的人员。执行此操作的最佳方法是什么,显然 SQL 注入(inject)和 id-10-t 错误是一个问题。

我可以直接使用吗

sql = 'ALTER TABLE table_name ADD ? ?'

然后将“new_col”和“varchar(100)”作为字符串传入?或者这超出了 PDO 的能力?

最佳答案

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

if (!preg_match('/^[a-z0-9_]+$/i', $column_name)) {
// Fail!!! submitted column name doesn't match regex
}
  • ^ = 字符串的开头
  • [a-z0-9_]+ = 一个或多个字母、数字、下划线
  • $ = 字符串结尾
  • /i = 不区分大小写

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

// 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 的复选框输入声明。

// Only after everything is successfully validated:
$sql = "ALTER TABLE `tablename` ADD `$valid_column_name` $valid_column_datatype $NULL_option";

关于php - 通过 PHP/PDO 使用用户定义的名称和数据类型将 MySQL 列添加/删除到现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13924689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com