2010-09-16 3 views
1

Dans le passé, je ferais quelque chose comme ceci:Comment vérifier s'il y a des résultats avec les déclarations préparées

$sql = 'SELECT * FROM customers WHERE customer_email="' . mysql_real_escape_string($_POST['customer_email']) . '" '; 
    $res = mysql_query($sql); 

    // if there are no hits... 
    if(mysql_num_rows($res) == FALSE) { 

Aujourd'hui, je suis en train de faire la même chose mais avec des déclarations préparées:

$stmt = $dbh->prepare("SELECT * FROM customers where customer_email = ? LIMIT 1"); 
    if ($stmt->execute(array($_POST['customer_email']))) { 

Le 2ème ligne de ma requête préparée if ($ stmt ... est-ce que "si cette requête obtient un résultat" ou est-ce "si cette requête est exécutée indépendamment des résultats ou pas si elle s'exécute sans erreur"

J'essaye g à travailler est avec des instructions préparées comment faites-vous l'équivalent de mysql_num_rows() == FALSE?

Merci!

Répondre

6

Vous pouvez utiliser la méthode rowCount() de PDOStatement pour obtenir le nombre de lignes retournées:

$stmt = $dbh->prepare("SELECT * FROM customers where customer_email = ? LIMIT 1"); 
if ($stmt->execute(array($_POST['customer_email']))) { 
    if($stmt->rowCount() > 0) { 
     //fetch stuff... 
    } 
} 

Ou, si rowCount() se révèle être peu fiable, vous pouvez le faire:

$all = $stmt->fetchAll(); 
if(count($all)) { 
    //loop through the set... 
} 
+0

'rowCount()' est une méthode, et officiellement il est pris en charge que pour les lignes affectées par des manipulations, mais oui, pour MySQL cela fonctionne comme le nombre de lignes dans un jeu de résultats. – Wrikken

+2

+1 Notez cependant que 'rowCount()' ne fonctionne que si vous utilisez des requêtes tamponnées. Aucune interface avec MySQL ne peut vous dire combien de lignes sont dans le jeu de résultats avant de les avoir récupérées. –

+0

@Wrikken, merci, mis à jour. –

1

PDOStatement::rowCount() retours le nombre de lignes affectées par une instruction DELETE, INSERT ou UPDATE et non le nombre de lignes renvoyées par une requête select, pour une requête de sélection que j'utilise:
fetchAll(PDO::FETCH_OBJ); Et echo count($lignes);

<?php 
$PARAM_hote='localhost'; 
$PARAM_port='3306'; 
$PARAM_db='test'; 
$PARAM_user='root'; 
$PARAM_pwd=''; 
try 
{ 
$connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_db, $PARAM_user,$PARAM_pwd); 
} 
catch(Exception $e) 
{ 
echo 'Erreur : '.$e->getMessage().'<br />'; 
echo 'N° : '.$e->getCode(); 
} 
$requete_prepare_1=$connexion->prepare("SELECT * FROM `test_mysql`"); 
$requete_prepare_1->execute(); 
$lignes=$requete_prepare_1->fetchAll(PDO::FETCH_OBJ); 
echo count($lignes); 
?> 
Questions connexes