Je reçois cette erreur:
Erreur fatale: appel de la fonction membre fetch () sur un booléen dans C:\xampp\htdocs\repo\générateur\modèle\database.php à la ligne 34
Quand je lance ce code:
class database
{
private $user = 'root';
private $pass = '';
public $pdo;
public function connect() {
try {
$this->pdo = new PDO('mysql:Host=localhost; dbname=generatordatabase', $this->user, $this->pass);
echo 'Połączenie nawiązane!';
}
catch(PDOException $e) {
echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
}
}
public function createTable() {
$q = $this->pdo -> query('SELECT * FROM article');
while($row = $q->fetch()) {
echo $row['id'].' ';
}
$q->closeCursor();
}
}
?>
Selon le manuel PHP pour PDO :: query
PDO :: query () retourne un objet PDOStatement ou FALSE en cas d'erreur.
Il semble que votre requête échoue (à la ligne 33) et renvoie donc un BOOLEAN (false), probablement parce qu'à ce stade de l'exécution, PDO ne s'est pas connecté à une base de données contenant une table appelée article. Dans la méthode connect (), je vois qu'elle essaie de se connecter à une base de données appelée 'generatordatabase'; assurez-vous que cette connexion est établie avant d'appeler createTable (), sinon assurez-vous qu'elle contient une table appelée 'article'.
Je recommanderais d'ajouter quelques exemples de code supplémentaires, par exemple le code qui appelle cette classe/méthode avant que l'erreur ne soit déclenchée.
Un certain traitement des erreurs vous aidera à éviter des problèmes comme celui-ci:
$q = $this->pdo->query('SELECT * FROM article');
//error case
if(!$q)
{
die("Execute query error, because: ". print_r($this->pdo->errorInfo(),true) );
}
//success case
else{
//continue flow
}
Je ne suis pas sûr que c'est exactement l'erreur que j'ai eue, mais mon erreur était due à ma variable $ con.
$con = new mysqli($Host,$username,$password,$database);
$sql = "SELECT name FROM users WHERE email = '$email'";
$stm = $con->prepare($sql);
$stm->execute();
et
$sql1 = "INSERT INTO posts
VALUES('$email','$body')";
$stm1 = $con->prepare($sql1);
if ($stm1->execute()) {
J'aurais dû faire:
$con = new mysqli($Host,$username,$password,$database);
$sql = "SELECT name FROM users WHERE email = '$email'";
$stm = $con->prepare($sql);
$stm->execute();
et
$con1 = new mysqli($Host,$username,$password,$database);
$sql1 = "INSERT INTO posts
VALUES('$email','$body')";
$stm1 = $con1->prepare($sql1);
$stm1->execute()