2010-10-13 14 views
-2

我在下面得到這個錯誤,想知道它是什麼?我能做些什麼來解決它?PHP&MySQL - 你的SQL語法問題有錯誤

 
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 
    ') AND articles_comments.user_id IN()' 
at line 6 

這是我的MySQL代碼。

$u_id2 = array(); 
$dbc = mysqli_query($mysqli,"SELECT users.user_id FROM users WHERE users.active IS NOT NULL OR users.deletion = 1"); 
if(!$dbc){ 
    print mysqli_error($mysqli); 
} else { 
    while($row = mysqli_fetch_assoc($dbc)) { 
     $u_id2[] = $row['user_id']; 
    } 
} 

$bad_com_id2 = array(); 
$dbc = mysqli_query($mysqli,"SELECT articles_comments.comment_id 
          FROM articles_comments 
          WHERE articles_comments.user_id IN(" . implode(",", $u_id2) . ") 
          AND articles_comments.parent_comment_id = 0"); 
if(!$dbc){ 
    print mysqli_error($mysqli); 
} else { 
    while($row = mysqli_fetch_assoc($dbc)) { 
     $bad_com_id2[] = $row['comment_id' ]; 
    } 
} 

$com_id2 = array(); 
$ucom_id2 = array(); 
$dbc = mysqli_query($mysqli,"SELECT articles_comments.comment_id, articles_comments.user_id FROM articles_comments WHERE articles_comments.article_id = '" . $article_id . "'"); 
if(!$dbc){ 
    print mysqli_error($mysqli); 
} else { 
    while($row = mysqli_fetch_assoc($dbc)) { 
     $com_id2[] = $row['comment_id' ]; 
     $ucom_id2[] = $row['user_id']; 
    } 
} 

$comments_to_be_displayed2 = array_diff($ucom_id2, $u_id2); 

$new_com_id2 = array(); 
$dbc = mysqli_query($mysqli,"SELECT articles_comments.comment_id 
          FROM articles_comments 
          INNER JOIN users ON articles_comments.user_id = users.user_id 
          INNER JOIN users_articles ON articles_comments.article_id = users_articles.id 
          WHERE articles_comments.article_id = '" . $article_id . "' 
          AND articles_comments.comment_id IN(" . implode(",", $com_id2) . ") 
          AND articles_comments.user_id IN(" . implode(",", $comments_to_be_displayed2) . ")"); 
if(!$dbc){ 
    print mysqli_error($mysqli); 
} else { 
    while($row = mysqli_fetch_assoc($dbc)) { 
     $new_com_id2[] = $row['comment_id' ]; 
    } 
} 
+0

你確定$ com_id2是不是空的? – MatTheCat 2010-10-13 15:47:16

+0

如果它空了,我該怎麼辦? – HELP 2010-10-13 15:48:23

+0

你的實際查詢看起來像......? – 2010-10-13 15:48:40

回答

1

IN()是你的問題。你需要有價值觀。

你既可以測試是否有價值觀和排除PHP的情況,當你生成的查詢字符串或使用一招:

IN(XYZ, " . implode(",", $u_id2) . ")

,其中XYZ是,你一定會永遠的值用於user_id(如果該列是標準自動增量主鍵,則可能爲-1)。

看到這裏供參考:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in

+0

+1。接得好。我們是否可以不使用像''''這樣的空字符串作爲虛擬條目?我沒有訪問MySQL的權限。 – codaddict 2010-10-13 16:07:57

+0

爲了獲得良好的性能,您應該使用與其他值相同的數據類型。我只是舉了一個例子,它是如何以及是否可以使用取決於具體情況。 – 2010-10-13 16:11:00