【问题标题】:Error when trying an additional SET command in query在查询中尝试附加 SET 命令时出错
【发布时间】:2010-11-16 16:51:01
【问题描述】:

下面的 MySQL 查询运行良好。它将 MySQL 数据库中的字段 votes_up 替换为变量 $votes_up 的任何值。

UPDATE submission 
   SET votes_up = $votes_up 
 WHERE submissionid = $id

但是,当我尝试添加第二个条件以同时将名为 flag1 的字段替换为名为 $uflag 的变量的值时,我收到一条错误消息。我试图用于此的查询如下。如果$uflag 的值为“admin”,则错误消息显示Unknown column 'admin' in 'field list'。此外,$uflag 的值没有被放入数据库中。任何想法为什么我会收到此错误?

UPDATE submission
   SET votes_up = $votes_up, 
       flag1 = $uflag 
 WHERE submissionid = $id

【问题讨论】:

    标签: php sql mysql mysql-error-1054


    【解决方案1】:

    您需要在字符串值中添加引号:

    UPDATE submission 
    SET votes_up = $votes_up, flag1 = $uflag 
    WHERE submissionid = $id
    

    应该是:

    UPDATE submission 
    SET votes_up = $votes_up, flag1 = '$uflag' 
    WHERE submissionid = $id
    

    【讨论】:

      【解决方案2】:

      你的查询有问题,先试试:

      UPDATE submission SET votes_up = '$votes_up', flag1 = '$uflag' WHERE submissionid = $id
      

      如果这不起作用,请尝试打印查询并在控制台中运行它。

      【讨论】:

        【解决方案3】:

        你必须在你的价值观周围加上引号并转义它们:

        $sql = '
            UPDATE submission
            SET votes_up = "'.mysql_real_escape_string($votes_up).'",
                flag1 = "'.mysql_real_escape_string($uflag).'"
            WHERE submissionid = "'.mysql_real_escape_string($id).'"
        ';
        

        它与另一个变量一起工作的原因是,数字引号不需要,但是会打开一个巨大的安全漏洞。

        【讨论】:

        • 您的代码没有在值周围加上引号,因为您只是将字符串与函数连接起来,您仍然需要像这样添加双引号:flag1 = "'.mysql_real_escape_string( $uflag).'"
        • 啊,分心了。已编辑。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 2018-11-05
        • 1970-01-01
        相关资源
        最近更新 更多