«Синтаксическая ошибка» при использовании Zend_Db для запроса базы данных MySQL - PullRequest
1 голос
/ 28 апреля 2011

Это мой запрос:

$query = $db
    ->select()
    ->from(array('ns' => 'news_subscriber'),
        array('ns.id', 'ns.subscriber_email')
    )
    ->where('ns.id NOT IN (?)', 
        $db
            ->select()
            ->from(array('nss' => 'news_subscribers_has_news_letter_content'),
                array('nss.news_subscribers_id')
            )
            ->where('nss.news_letter_content_id =' , $id)
    );
$subscribers = $db->fetchAll($query);

Я получаю эту ошибку:

Syntax error or access violation 1064
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 1`

Я чувствую, что проблема в "IN".

Есть идеи?

Ответы [ 5 ]

4 голосов
/ 28 апреля 2011

Ваш запрос содержит несколько ошибок.

  • ->where('nss.news_letter_content_id =', $id)

    Вы забыли ? после =.

  • ->where('ns.id NOT IN (?)', $db->select() ...

    Я почти уверен, что сначала нужно преобразовать объект подзапроса в массив.

2 голосов
/ 28 апреля 2011
$subscribers = $db->fetchAll($db->select()->from('news_subscriber ns, subscriber_email se')
->where('ns.id NOT IN ('.$db->select()->from( 'news_subscribers_has_news_letter_content nss') ->where('nss.news_letter_content_id =',$id))));

Я не использую массив в моем выборе.Посмотрите, полезно ли это.

1 голос
/ 28 апреля 2011

Обратите внимание, что вы всегда можете увидеть весь запрос, чтобы увидеть, в чем проблема.

echo (string)$query;
// die();
1 голос
/ 28 апреля 2011

Вы можете написать свой запрос следующим образом. Пожалуйста, проверьте ниже.

$subscribers = $db->fetchAll($db->select()->from(array('ns' => 'news_subscriber','nss'=> 'news_subscribers_has_news_letter_content'),
                                array('ns.id',
                                    'ns.subscriber_email','nss.news_subscribers_id'))                
                ->where('ns.id NOT IN (?) AND 'nss.news_letter_content_id =',$id);

Спасибо.

0 голосов
/ 28 апреля 2011

вы уверены, что все переменные, которые вы использовали в своем запросе, получают значение, в большинстве случаев эта ошибка возникает, если значения переменных в запросе неинициализированы или "" в случае строки ......... Также в этом случае я думаю, что у вас есть дополнительный знак ")" в конце концов, который помогает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...