2011-04-28 35 views
1

時,這是我的查詢:「語法錯誤」 使用Zend_Db的查詢MySQL數據庫

$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」。

任何想法?

+0

我已經在這篇文章中爲您解決了格式問題,但請在將來發布問題時查看http://stackoverflow.com/editing-help。 – Treffynnon 2011-04-28 08:38:40

回答

4

您的查詢有多個錯誤。

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

    您的=後忘了?

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

    我敢肯定,你有子查詢對象首先轉換成數組。

0

您確定您在查詢中使用的所有變量都獲得了一個值:如果查詢中的變量值未初始化,則會發生此錯誤的大部分時間,如果是字符串,則爲「」 .........也在這種情況下,我認爲你有一個額外的')'在最後希望有所幫助

+0

yeap我只是一個一個檢查他們 – haider 2011-04-28 08:45:39

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

你可以這樣寫你的查詢。請在下面檢查。

$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); 

謝謝。

1

請注意,您始終可以看到整個查詢以查看問題出在哪裏。

echo (string)$query; 
// die();