La page ne résultera pas avec l'instruction PDO

Ma fonction ne veut pas charger. J'essaie d'échouer sur l' id , le name et l' age . Qu'est-ce que je fais mal?

 <?php $db_host = "localhost"; $db_username = "root"; $db_pass = ""; $db_name = "testdb"; $dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_name,$db_username,$db_pass); $dbh->setAtsortingbute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); function getManger () { global $con; $sql= $dbh->prepare("SELECT * FROM test_tbl"); $stmt = $db->prepare($sql); $stmt->execute(); while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) { $id= $row['id']; $name = $row['name']; $age - $row['age']; echo "<li>$id</li>"; echo "<li>$name</li>"; echo "<li>$age</li>"; } } ?> 

Pour décrire les erreurs dans votre code et proposer une solution testée et fonctionnelle:

  • Vous appelez la fonction prepare() deux fois.
  • Utiliser la mauvaise variable pour votre SELECT.
    … en utilisant $sql où il devrait être $stmt
  • Ne peut pas appeler votre fonction getManger() .
  • Utiliser un trait d'union au lieu d'un signe égal $age - $row['age']; => $age = $row['age'];

Récrire:

 <?php $db_host = "localhost"; $db_username = "root"; $db_pass = ""; $db_name = "testdb"; $dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_name,$db_username,$db_pass); $dbh->setAtsortingbute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); function getManger($dbh) { $stmt= $dbh->prepare("SELECT * FROM test_tbl"); $stmt->execute(); while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) { $id = $row['id']; $name = $row['name']; $age = $row['age']; echo "<li>$id</li>"; echo "<li>$name</li>"; echo "<li>$age</li>"; } } // call the function getManger($dbh); 

Notes de bas de page :

Il est généralement préférable de passer votre variable de connection DB dans votre fonction, plutôt que de la rendre globale.

Voici quelques articles sur Stack sur le global:

Le choix t'appartient.

Tu utilises

 global $con; 

Mais ne le référez plus à la fonction, mais vous faites reference à $dbh qui est hors de la scope de la fonction car il n'est pas passé et ne doit pas être une reference globale, donc les options peuvent être:

 function getManger () { global $dbh; $sql= $dbh->prepare("SELECT * FROM test_tbl"); ... } 

Ou

 function getManger ($DBCon) { $sql= $DBCon->prepare("SELECT * FROM test_tbl"); ... } 

Ensuite, appelez la fonction:

 getManager($dbh); 

Cela passera la variable de connection de database directement aux parameters de fonctions à utiliser en interne. Je reorderais plus ce sur l'utilisation global

En outre. Il ne semble pas que vous appelleriez même la fonction en question en fonction du code. Êtes-vous sûr de faire cela?


D'autres faux à l'intérieur de la fonction peuvent être:

 $age - $row['age']; 

Ce que vous dites actuellement à PHP pour soustraire $row['age']; à partir d'un entier stocké en $age , vous voulez peut-être dire:

 $age = $row['age']; 

et comme indiqué par @ fred-ii dans les commentaires. Vous appelez préparer deux fois, ce qui est inutile et pourrait triggersr une erreur, selon votre configuration de déclaration d'erreur.

 $sql= $dbh->prepare("SELECT * FROM test_tbl"); $stmt = $db->prepare($sql); 

Devrait être soit 1)

 $sql = "SELECT * FROM test_tbl"; $stmt = $dbh->prepare($sql); 

OU

 $stmt = $dbh->prepare("SELECT * FROM test_tbl"); 

mais aussi une éventuelle erreur de frappe dans la deuxième command de préparation?

$ stmt = $ db -> préparer ($ sql);