2009-10-31 46 views
1

我在运行此查询时遇到问题。我不断收到错误:PHP + MYSQL:更新时出现问题查询

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'read = 'readd' WHERE user_id = '1' LIMIT 1' at line 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 

有谁看到我要去哪里错了吗?谢谢!

回答

4

我认为它可能是read作为一个关键字,尝试使用它,即使用周围的反引号(很难用SO的降格语言表达;)。

+0

我想我明白你在说什么。我试过在它周围放置反引号,没有工作......然后我试图改变表中的列名仍然没有:/ – Stephen 2009-10-31 13:30:58

1

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

您应该报告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); 
0

为了安全起见,我建议你使用sprintf函数来传递参数。

$q = sprintf("UPDATE inbox SET `read` = '%s' WHERE `user_id` = %d LIMIT 1", 
        $read, $_SESSION['user_id']); 
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); 

谢谢大家!