PHP + MYSQL:更新查询问题

时间:2009-10-31 04:07:02

标签: php sql mysql

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

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'read ='附近使用正确的语法'在第1行使用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);

地址栏中的网址:

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

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

4 个答案:

答案 0 :(得分:4)

我认为它可能会将read作为一个关键字,尝试使用它,即使用“反引号”(很难用SO的降价语言表达;)。

答案 1 :(得分:1)

首先,如果您使用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);

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

嘿伙计们弄清楚出了什么问题:

 $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);

谢谢大家!