2009-10-31 42 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); 

謝謝大家!