2010-10-13 5 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

+0

Если его пустой, что мне делать? – HELP

+0

Ваш запрос действительно выглядит ...? –

ответ

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

+0

Для хорошей производительности вы должны использовать тот же тип данных, что и другие значения. Я просто привел пример, как и если он может быть использован, зависит от случая к случаю. –