gpt4 book ai didi

php - 使用 PHP 添加 MySQL 中不存在的字段

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

我有一个用 PHP 编写的提交脚本。我们组织的多项调查都使用它。这些调查是由其他用户创建的。当他们提交脚本时,PHP 将数据放入 MySQL 中的相应表中。我有时遇到的错误是用户更新了表单。他们添加一个字段,或重命名一个输入,但脚本不会考虑它,因为它期望一切都相同。因此,我正在尝试找到一种方法来使其适应添加新字段的情况。这是我所拥有的:

 if( mysql_num_rows( mysql_query("SHOW TABLES LIKE '".$survey."'"))){

echo "table exists";
$sql = "SELECT * FROM " . $survey . ";";
$result = mysql_query($sql)
or die(mysql_error());
$i=0;

while($row = mysql_fetch_row($result));{
echo $row[0];
foreach($_POST as $k => $v){
$i++;
if($k != $row[$i]){
$query = "ALTER TABLE " . $survey . " ADD " . $k . " VARCHAR(100);";
mysql_query($query)
or die(mysql_error());
}
}
}
}

我习惯在JS中做while循环,所以我不知道使用i在这里是否有效(实际上,我知道它不起作用......因为它不起作用......)。我想说的是,如果某个键与当前字段名称不匹配,则将其添加到表中。如何正确返回$row?

当我提交脚本时,它说:重复的列名称“V4”

我有 echo $row[0] 但它返回 1。这是第一个记录的主键中使用的 int。

最佳答案

在 while 循环声明的末尾有一个不应该出现的 ; 。不确定这是否导致问题,因为您没有说明上面的代码做什么。如果 ; 不是问题,请更新问题。

您的 while 循环声明应如下所示:while($row = mysql_fetch_row($result)) {

此外,正如 Marc B 如此外交地在对您的问题的评论中指出的那样,您应该转义直接进入查询的任何用户输入。

最简单的方法是在首次使用 $survey 之前使用 $survey = mysql_real_escape_string($survey) 作为启动或切换到 PDO/MySQLi 并使用 input binding (prepared statements)Here are the prepared statements docs for PDO 。可以而且应该采取更多措施来保护自己,但以上是一个好的开始。

关于php - 使用 PHP 添加 MySQL 中不存在的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11107450/

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