PHP MySQL命令语法错误

时间:2014-03-24 21:22:03

标签: php sql

此sql查询无效:

$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`

3 个答案:

答案 0 :(得分:2)

topic_subject可能是字符数据。要在SQL文本中包含文字字符串,应将其括在单引号中。

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

如果你使用预备语句,这不会是一个问题, 所有 美丽的事情在这个世界上,,不要使用已弃用的PHP mysql_接口进行新的开发。它已被 mysqli _ PDO 接口取代。

答案 1 :(得分: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

答案 2 :(得分:0)

这里有几个问题。

  1. 引用你的字符串
  2. 确保您的数据类型正确
  3. 
        $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}')";  
    

    它可能会帮助您在代码中使用更多变量(如图所示),以便您可以使用调试器来验证您创建的字符串和变量是否具有您希望它们具有的值。