使用pdo从查询返回的更多行

时间:2013-09-01 00:19:51

标签: php mysql pdo

我正在使用PHP w / PDO使用MySQL而我遇到的问题是我执行一个SQL语句并用HTML写出结果。然后执行另一个SQL语句,问题是返回的行不应返回。我知道这是真的,因为当我在PHPMyAdmin中执行第二个查询时,我得到了我期望的结果。环境如下(PHP 5.2.17,MySQL 5.30,Apache 2.2.25)。只是把一个猴子扳手投入到这种情况下,就像它应该在我的电脑上一样。如果有帮助,这是SQL stmt:

$unusedContactsQuery = $dbc->prepare("select idContact, contactName 
from contactinfo
where iduser = :iduser
and contactAuthorized = 1
and idcontact not in (select a.idcontact from  contactinfo a                    
        inner join eventcontacts c on a.idContact = c.idContact
            inner join eventschedule b on c.idEventContact = b.idEventContact
                where b.idEventContact = :idEventContact
                and a.iduser = :iduser
                and contactAuthorized = 1)");

*联系人列表: 贝拉卢戈西 木本啄木鸟 Bucky Winters 贝拉卢戈西 木本啄木鸟

Bella Lugosi和木质啄木鸟是该列表顶部前两个名称的副本。第一个查询返回前两个名称(我对该查询执行了rowCount()并显示了2,我在第二个查询中执行了rowCount()并显示了3,因此最后三个名称从第二个查询中撤回查询)那么有人知道为什么会这样吗? (第二个查询拉回了在PHPMyAdmin中相同查询正常工作时不应检索的行)

1 个答案:

答案 0 :(得分:0)

猜测,我会说两个查询中的参数不一样。没有理由相同的查询返回不同的行数。

我建议不要使用NOT IN,而是建议使用左连接直接加入contactinfo并查找空行 - 它也很可能更快。

如果没有要测试的数据,重新编写查询很难,但请尝试

SELECT idContact, contactName 
FROM contactinfo ci
LEFT JOIN eventcontacts ec USING(idContact)
LEFT JOIN eventschedule es USING(idEventContact)

WHERE ci.iduser = :iduser 
AND ec.idEventContact = :idEventContact 
AND ci.contactAuthorized = 1 
AND es.idEventContact IS NULL