Php 检查是否使用Zend_Db_Select选择了任何行

Php 检查是否使用Zend_Db_Select选择了任何行,php,zend-framework,count,zend-db-select,Php,Zend Framework,Count,Zend Db Select,我正在从DB表中选择一篇文章,并使用getParam()从url获取id。我想做的是,当没有url中指定id的帖子时,显示一条错误消息 这是我的疑问: $db = Zend_Registry::get('db'); $select = $db->select(); $select->from(array('p' => 'posts')) ->join(array('u' => 'users'), 'u.user_id = p.post_userid')

我正在从DB表中选择一篇文章,并使用getParam()从url获取id。我想做的是,当没有url中指定id的帖子时,显示一条错误消息

这是我的疑问:

$db = Zend_Registry::get('db');
$select = $db->select();
$select->from(array('p' => 'posts'))
       ->join(array('u' => 'users'), 'u.user_id = p.post_userid')
       ->where('p.post_id = ?', $postid);
$post = $db->fetchRow($select);
问题是,当我执行回声计数($post)时,即使id无效,它也会显示
1
,而当id有效且实际选择了一行时,它会显示多于1

所以我的问题是,我应该如何检查有多少行是用指定的id选择的?($posted!)


有什么建议吗?

我认为您应该更改
$post=$db->fetchRow($select)
into
$posts=$db->fetchAll($select)

如果没有结果,fetchRow将返回false,因此您可以直接对结果进行测试,例如:If($post){…这就是count返回1的原因,对数组以外的任何对象调用count都会返回1(空变量除外)。请注意,这与Db_Table的fetchRow方法不同,该方法返回空值。

但我从不希望超过一行。如果这样做,我还必须执行类似于
foreach($posts as$row)
的操作,这会使事情变得复杂。没有其他方法吗?@Sled.$Db->fetchRow($select);如果找不到行,则应返回false。因此,您可以只检查false==$post。