2011-01-28 2 views
0

Je sélectionne un message de ma table DB et j'obtiens l'id de l'URL avec getParam(). Ce que je veux faire est, montrer un message d'erreur quand il n'y a pas de messages avec l'id spécifié dans l'URL.Chech si des lignes ont été sélectionnées avec Zend_Db_Select

C'est la requête que j'ai:

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

Le problème est, quand je fais echo count($post) il montre 1 même lorsque l'ID est invalide, et il montre plus de 1 lorsque l'ID est valide et une ligne a été effectivement sélectionné. Donc, ma question est, comment dois-je vérifier combien de lignes ont été sélectionnés avec l'ID spécifié? ($ postid!).

Des suggestions?

Répondre

1

S'il n'y a aucun résultat fetchRow retournera false, afin que vous puissiez tester directement sur le résultat, comme: if ($ post) {... Et cela est la raison pour laquelle count renvoie 1, appel count sur autre chose qu'un tableau renvoie 1 (sauf sur une variable null). Notez que cela est différent de la méthode fetchRow de Db_Table, qui renvoie null.

1

Je pense que vous devriez changer $post = $db->fetchRow($select); dans $posts = $db->fetchAll($select);

+0

Mais je ne m'attends jamais à plus d'une rangée. Si je fais cela, je devrai aussi faire quelque chose comme 'foreach ($ posts comme $ row)' ce qui complique les choses. N'y a-t-il pas d'autre moyen? – networkprofile

+1

@Sled. $ db-> fetchRow ($ select); devrait retourner false si aucune ligne n'a été trouvée. Ainsi, vous pouvez simplement vérifier si false === $ post. – Marcin

Questions connexes