2009-01-02 8 views
1

Je suis en train de mettre à jour du code des anciennes fonctions mysql_ * vers PDO. Il se connecte sans problème, exécute la requête sans problème, mais le jeu de résultats est vide. PDO :: query() est censé renvoyer un objet PDOStatement, mais je deviens vrai en retour. Aucune erreur n'est signalée.Problème de requête PDO

Voici mon code:


try 
{ 
    $DB = new PDO("mysql:host=localhost;dbname=dbname", "user", "pass"); 
    $stmt = $DB->prepare("SELECT * FROM report_clientinfo"); 
    $stmt->execute(); 
}catch(PDOException $e) 
{ 
    echo $e->getMessage() . "\n"; 
} 


echo gettype($stmt) . "\n"; 
if ($stmt) echo "true\n"; 
else echo "false\n"; 

$resultset = $stmt->fetchAll(); 

if(empty($resultset)) 
{ 
    exit("ERROR: getClientInfo query failed."); 
} 

$DB = null; 

print_r($resultset); 

La sortie je vois est:

objet vrai ERREUR: requête getClientInfo a échoué.

Des idées pour lesquelles il ne renvoie aucun résultat?

Répondre

5
object 
true 
ERROR: getClientInfo query failed. 

Il me semble que votre variable PDOStatement $stmt est en fait rapporté comme un objet, pas « true ». Le code imprime alors "true" quand il voit que $stmt est non-nul, ce qui est, parce que c'est un objet.

Je vous recommande de vérifier la valeur de retour de $stmt->execute(). Vous pourriez avoir une erreur SQL. Par exemple, si vous avez mal orthographié le nom de la table ou si la table n'existe pas dans la base de données "dbname" à laquelle vous vous êtes connecté ou l'utilisateur que vous vous connectez n'a pas le privilège d'interroger cette table.

Vérifiez également $stmt->errorInfo() pour obtenir plus de détails sur les erreurs qui se sont produites.

0

Je suis un peu gêné de rapporter que je pointais vers le mauvais DSN. Je suppose que c'est ce que j'obtiens pour essayer d'apprendre quelque chose de nouveau après seulement quelques heures de sommeil après être sorti pour la Saint-Sylvestre. Merci pour l'astuce sur la méthode PDOStatement :: errorInfo(), je ne l'avais pas remarqué auparavant.

+0

Pas de problème. Après seulement quelques heures de sommeil, il est difficile de bien faire quelque chose - sauf dormir! –