【问题标题】:PHP+MYSQL: Problem with Update queryPHP+MYSQL:更新查询的问题
【发布时间】:2009-10-31 04:07:02
【问题描述】:

我在运行此查询时遇到问题。我不断收到错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'read = 'readd' WHERE user_id = '1' LIMIT 1' 附近使用正确的语法

代码

 $conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error());
    mysql_select_db('main') or die(mysql_error());

 $read = "message read";

 $set_statuss = "UPDATE inbox ".
            "SET read = '".$read."' ".
            "WHERE user_id = '".$_SESSION['user_id']."' ".
            "LIMIT 1";

编辑:这是表格:

 CREATE TABLE `inbox` (
 `inbox_id` int(5) NOT NULL auto_increment,
 `posted_to` int(5) NOT NULL,
 `posted_by` int(5) NOT NULL,
 `subject` text NOT NULL,
 `message` text NOT NULL,
 `date_posted` datetime NOT NULL,
 `read` text NOT NULL,
 PRIMARY KEY  (`inbox_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

编辑:更新了查询,但现在 PHP 只是显示为白色..

 $read = "read";

 $set_statuss = "UPDATE inbox ".
            "SET read = '".$read."' ".
            "WHERE posted_to = '{$_SESSION['user_id']}' AND inbox_id = '".$_GET['msg_id'];."' ";

 mysql_query($set_statuss) or die(mysql_error() . $set_statuss);

以及地址栏中的url:

 http://localhost:8888/wmin/msg.php?user_id=1&msg_id=2

有人知道我哪里出错了吗?谢谢!

【问题讨论】:

    标签: php sql mysql


    【解决方案1】:

    我认为它可能将 read 作为关键字,尝试将其去掉,即在其周围使用 `` 反引号(用 SO 的 markdown 语言很难表达;-)。

    【讨论】:

    • 我想我明白你在说什么。我试过在它周围加上反引号,没有用......然后我尝试更改表中的列名仍然没有:/
    【解决方案2】:

    一方面,如果您使用heredoc,它会使您的代码更易于阅读。另一方面,您为什么将其限制为 1 行?你怎么知道你正在更新哪一行?

    您应该报告mysql_query() 调用中的错误,看看究竟出了什么问题。我假设$_SESSION['user_id'] 是一个数字?如果未定义,查询将失败,这就是为什么您应该记录和/或报告错误 SQL。

    $conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error());
    mysql_select_db('main') or die(mysql_error());
    
    $read = "message read";
    $sql = <<<END
    UPDATE inbox
    SET read = `$read`
    WHERE user_id = $_SESSION[user_id]
    END;
    mysql_query($sql) or die(mysql_error() . ': ' . $sql);
    

    【讨论】:

      【解决方案3】:

      出于安全考虑,我建议您使用 sprintf 函数来传递参数。

      $q = sprintf("UPDATE inbox SET `read` = '%s' WHERE `user_id` = %d LIMIT 1",
                          $read, $_SESSION['user_id']); 
      

      【讨论】:

        【解决方案4】:

        嘿,伙计们知道出了什么问题:

         $read = "message read";
        
         $set_statuss = "UPDATE inbox ".
                    "SET readd = '".$read."' ".
                    // changed $_SESSION to $_GET and the ';' after msg_id GET 
                    "WHERE posted_to = '{$_SESSION['user_id']}' AND inbox_id = '".$_GET['msg_id'];."' ";
        
         mysql_query($set_statuss) or die(mysql_error() . $set_statuss);
        

        谢谢大家!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-22
          • 1970-01-01
          • 1970-01-01
          • 2012-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多