使用 PHP 在 MySQL 中添加一个字段(如果它不存在)


Using PHP to add a field in MySQL if it doesn' texist

我有一个用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 中做循环,所以我不知道使用 i 是否在这里工作(实际上,我知道它不起作用......因为它不起作用... 我想说的是,如果键与当前字段名称不匹配,则将其添加到表中。 如何正确退回$row?

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

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

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

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

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

最简单的方法是在第一次使用$survey之前使用 $survey = mysql_real_escape_string($survey) 作为开始或切换到 PDO/MySQLi 并使用输入绑定(预准备语句)。 以下是 PDO 的准备语句文档。 可以而且应该做更多的事情来保护自己,但以上是一个好的开始。