2014-03-24 235 views
0

這個sql查詢不工作:PHP MySQL命令語法錯誤

$sql = "INSERT INTO top(topic_subject,topic_date, topic_cat, topic_by) 
VALUES(" . mysql_real_escape_string($_POST['topic_subject']) . " , NOW()," . mysql_real_escape_string($_POST['topic_cat']) . " , " . isset ($_SESSION['user_id']) . ")"; 

我該如何解決?我收到此錯誤消息。

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 ')' at line 2` 
+6

1.你沒有引用你的字符串。 2.參數化您的查詢。 – Sammitch

回答

1

您忘記了引號。

$sql = "INSERT INTO top(topic_subject,topic_date, topic_cat, topic_by) 
VALUES('" . mysql_real_escape_string($_POST['topic_subject']) . "' , NOW(),'" . mysql_real_escape_string($_POST['topic_cat']) . "' , '" . isset ($_SESSION['user_id']) . "')"; 

並注意不要使用mysql_*。改爲使用PDOmysqli

+1

感謝它的工作 – user3423450

2

topic_subject很可能是字符數據。要在SQL文本中包含文字字符串,它應該用單引號引起來。

... VALUES ('abc', ... 

如果您使用的預處理語句,這不會是一個問題,併爲所有事情是美麗良好在這個世界上,不要」使用不推薦使用的PHP mysql_接口進行新的開發。它已被代替mysqli_PDO接口。

0

這裏有幾個問題。

  1. 引用你的字符串
  2. 確保您的數據是正確的類型

    $topic_subject = mysql_real_escape_string($_POST['topic_subject']); 
    $topic_date = NOW(); 
    $topic_cat = mysql_real_escape_string($_POST['topic_cat']); 
    $topic_by = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : ""; // always returns a string value. 

    $sql = "INSERT INTO top(topic_subject,topic_date, topic_cat, topic_by) 
    VALUES('{$topic_subject}' , {$right_now}, '{$topic_cat}' , '{$topic_by}')"; 

它可以幫助你使用更多的變量在代碼中(如圖所示),這樣就可以使用調試器驗證您創建的字符串和變量是否具有您希望它們具有的值。