gpt4 book ai didi

php - 使用 MySQLi 安全地创建动态表

转载 作者:行者123 更新时间:2023-11-29 00:17:00 26 4
gpt4 key购买 nike

我希望能够创建动态表,用于自定义用户调查...例如调查猴子...我将如何着手创建类似的东西?

因为我想让用户能够使用不同数量的文本字段和不同的选项字段来创建调查...我需要为每个调查创建一个自定义表格。

这样的事情可能吗?

<?php

$table_name = 'survey_'.$_POST['surveyid'];

$query = 'CREATE TABLE ? (
`responseid` INT NOT NULL AUTO_INCREMENT,
`textarea1` TEXT NULL,
`textarea2` TEXT NULL,
`textarea3` VARCHAR(255) NULL,
`drop_down1` VARCHAR(255) NULL,
`drop_down2` VARCHAR(255) NULL,
`bool1` BIT NULL,
`bool2` BIT NULL,
PRIMARY KEY (`responseid`))';

if($stmt = $mysqli->prepare($query)){
$stmt->bind_param('s', $table_name);
$stmt->execute();
$stmt->close();
}else die("Failed to prepare");

?>

上面的例子返回“Failed to prepare”,因为我不认为我可以准备一个表名...是否有其他解决使用 mysqli 的方法?

if(ctype_digit($_POST['surveyid']) && $_POST['surveyid']>0){

$table_name = 'survey_'.$_POST['surveyid'];

$query = 'CREATE TABLE '.$table_name.' (
`responseid` INT NOT NULL AUTO_INCREMENT,
`textarea1` TEXT NULL,
`textarea2` TEXT NULL,
`textarea3` VARCHAR(255) NULL,
`drop_down1` VARCHAR(255) NULL,
`drop_down2` VARCHAR(255) NULL,
`bool1` BIT NULL,
`bool2` BIT NULL,
PRIMARY KEY (`responseid`))';

我知道我可以尝试清理 $_POST['surveyid'](就像我上面所做的那样),但如果可能的话我更愿意准备它。

最佳答案

$table_name = 'survey_'.$_POST['surveyid'];

请勿执行上述操作。如果您在任何 SQL 字符串中直接包含 $_GET 或 $_POST 数据,黑客很容易利用您的网站。

但是你不能为表名使用参数。参数 代替单个标量值。 You can prepare CREATE TABLE 但您不能将参数用于标识符(例如表名)。

最佳做法是确保您的表名符合规则,例如仅数字字符串的前导部分,最大长度为 MySQL 表名的最大长度:

$table_name = 'survey_' . strspn(trim($_POST['surveyid']), '0123456789', 0, 56);

如果您对 surveyid 有其他规则,则可以使用 preg_replace():

$table_name = 'survey_' . preg_replace('^(\w+)', '$1', trim($_POST['surveyid']));

关于php - 使用 MySQLi 安全地创建动态表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22620423/

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