首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不是文本列表,使用PHP在MySQL中添加一个字段

如果不是文本列表,使用PHP在MySQL中添加一个字段
EN

Stack Overflow用户
提问于 2012-06-20 02:50:36
回答 1查看 86关注 0票数 0

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

代码语言:javascript
复制
 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,但它返回一个1,这是第一条记录的主键中使用的整数。

EN

回答 1

Stack Overflow用户

发布于 2012-06-20 02:53:07

在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。为了保护自己,我们可以也应该做更多的事情,但以上是一个很好的开始。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11107450

复制
相关文章

相似问题

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