使用Zend_Db查询MySQL数据库时出现“语法错误”

时间:2011-04-28 08:35:07

标签: php mysql database zend-framework

这是我的疑问:

$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 个答案:

答案 0 :(得分:4)

您的查询有多处错误。

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

    您忘记了?之后的=

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

    我很确定你必须先将子查询对象转换为数组。

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

我在选择中不使用数组。看看这是否有用。

答案 2 :(得分: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);

感谢。

答案 3 :(得分:1)

请注意,您始终可以查看整个查询以查看问题所在。

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

答案 4 :(得分:0)

您确定在查询中使用的所有变量都获取了值,如果查询中的变量值未初始化,则大多数情况下会发生此错误;如果是字符串,则会出现“” .........同样在这种情况下,我认为你有一个额外的')'到底希望有帮助