Error: Call to a member function prepare() on null

145071
,

Bonjour,

Voila je rencontre un petit problème avec mon code. Cela fait quelque temps que je bloque sur cette erreur, et je n'arrive pas à comprendre d'où elle provient.
Je cherche à savoir si un email existe déjà dans ma bdd lors de l'inscription d'un utilisateur.

Mon erreur : https://www.zupimages.net/up/19/48/3jez.png
Mon arborécence : https://zupimages.net/up/19/48/sxlq.png
Mon code "/signup/index.php" : https://pastebin.com/qaADcDKt
Mon code "/config/includes/bdd/prepare.php" : https://pastebin.com/pqkbm8ks
Mon code "/config/includes/bdd/database.php" : https://pastebin.com/qYuFk40G

Merci d'avance pour votre aide.

22 Réponse

1
40917
,

bonjour.
il te manque le return $this->pdo dans la fonction getpdo

145071
,

Je les mit try

145071
,

Et cela ne change rien

40917
,

poste nous ici avec le bouton </ > le code que tu as modifié

145071
,

Je nai rien modifier etant donner que ce que tu me demande est deja present ou sinon je ne vois pas ou veut tu le mettre ?

40917
,

bah je ne vois aucun return dans la fonction

145071
,

Je ne vois pas comment veut tu qur je le place ?

Default
,

Bonjour,

Ton code :

 private function getPDO() {
        try {
            if($this->pdo == null){
                $user = 'user_xxx';
                $password = 'xxxx';

                $pdo = new PDO('mysql:host=' . $this->tokenAuth['host'] . ';dbname=' . $this->tokenAuth['dbname'] . ';charset=UTF8', $user, $password);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $this->pdo = $pdo;
            }
        } catch (PDOException $e) {
            echo 'Connexion bdd = false <br/>Raison = ';
            die('Erreur : ' .$e->getMessage());
        }
    }

La modification que @Carouge10 te propose ...

 private function getPDO() {
        try {
            if($this->pdo == null){
                $user = 'user_xxx';
                $password = 'xxxx';

                $pdo = new PDO('mysql:host=' . $this->tokenAuth['host'] . ';dbname=' . $this->tokenAuth['dbname'] . ';charset=UTF8', $user, $password);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $this->pdo = $pdo;
            }

            return $this->pdo;
        } catch (PDOException $e) {
            echo 'Connexion bdd = false <br/>Raison = ';
            die('Erreur : ' .$e->getMessage());
        }
    }
145071
,

Ahh d'accord. Mercii

Default
,

Bonjour
Ton code

/**
    * Connexion à la base de données.
    */
    private function getPDO() {
        try {
            if($this->pdo == null){
                $user = 'user_xxx';
                $password = 'xxxx';

                $pdo = new PDO('mysql:host=' . $this->tokenAuth['host'] . ';dbname=' . $this->tokenAuth['dbname'] . ';charset=UTF8', $user, $password);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $this->pdo = $pdo;
            }
        } catch (PDOException $e) {
            echo 'Connexion bdd = false <br/>Raison = ';
            die('Erreur : ' .$e->getMessage());
        }
    }

    /**
    * Appel de la BDD
    */
    public function BDD() {
        $this->getPDO();
    }

la correction

/**
    * Connexion à la base de données.
    */
    private function getPDO() {
        try {
            if($this->pdo == null){
                $user = 'user_xxx';
                $password = 'xxxx';

                $pdo = new PDO('mysql:host=' . $this->tokenAuth['host'] . ';dbname=' . $this->tokenAuth['dbname'] . ';charset=UTF8', $user, $password);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $this->pdo = $pdo;
            }

            // ajoute cette ligne
            return $this->pdo;
        } catch (PDOException $e) {
            echo 'Connexion bdd = false <br/>Raison = ';
            die('Erreur : ' .$e->getMessage());
        }
    }

    /**
    * Appel de la BDD
    */
    public function BDD() {
        // ajoute return comme ceci
        return $this->getPDO();
    }

Merci

145071
,

Bonsoir,

Cela fonctionne, maintenant j'ai cette erreur :

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''users' WHERE 'user_email' = 'contact@ben27.ga'' à la ligne 1 in F:\wamp64\www\ben27\config\includes\bdd\prepare.php on line 21

et

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''users' WHERE 'user_email' = 'contact@ben27.ga'' à la ligne 1 in F:\wamp64\www\ben27\config\includes\bdd\prepare.php on line 21

mon fichier prepare maintenant donne sa :

<?php   

require_once('../config/includes/bdd/database.php');

/**
* Requête à la base de données.
*/

function prepare($statement, $values) {
    $database = new Database();
    $bdd = $database->BDD();
    $request = $bdd->prepare($statement);
    $request->execute($values);
    return $request;
}

function countDatabaseValue($key, $value) {
    $database = new Database();
    $bdd = $database->BDD();
    $request = $bdd->prepare("SELECT * FROM 'users' WHERE '$key' = '$value'");
    $request->execute();
    return $request->rowCount();
}
?>

Merci par avance, j'ai chercher une solution mais cela n'est pas clair et je ne parvient pas à résoudre cette erreur.

Default
,

Bonjour, tu peux essayer avec cette syntaxe. merci

function countDatabaseValue($key, $value) { $database = new Database(); $bdd = $database->BDD(); $request = $bdd->prepare("SELECT * FROM users WHERE  {$key} = {$value}"); $request->execute(); return $request->rowCount(); } ?>
145071
,

J'ai essayé est sa me fait toujours la meme erreur.

Default
,

Je viens de constater que tu utlise la methode execute deux fois.
Voila la correction que je te propose

function prepare($statement) { 
$database = new Database(); 
$bdd = $database->BDD(); 
$request = $bdd->prepare($statement); 
// $request->execute($values); 
return $request; 
} 
function countDatabaseValue($key, $value) { $database = new Database(); 
$bdd = $database->BDD(); 
$request = $bdd->prepare("SELECT * FROM users WHERE :key = :value"); 
$request->execute([
  'key' => $key,
  'value' => $value
]); 
return $request->rowCount(); 
} 
?>

Tu supprime la quatrième ligne dans ta fonction prepare. merci

145071
,

J'ai fait ce que tu ma dit mais il me met lerreur au niveau de la ligne 23 qui est :

'value' => $value

et c'est dans

$request->execute([
      'key' => $key,
      'value' => $value
    ]); 

le code maintenant:

<?php   

require_once('../config/includes/bdd/database.php');

/**
* Requête à la base de données.
*/

function prepare($statement, $values) {
    $database = new Database();
    $bdd = $database->BDD();
    $request = $bdd->prepare($statement);
    $request->execute($values);
    return $request;
}

function countDatabaseValue($key, $value) {
    $database = new Database();
    $bdd = $database->BDD();
    $request = $bdd->prepare("SELECT * FROM 'users' WHERE :key = :value;");
    $request->execute([
      'key' => $key,
      'value' => $value
    ]); 
    return $request->rowCount();
}
?>
Default
,

Commente cette ligne

$request->execute($values);

dans ta fonction

145071
,

et le nom de la table je suis obliger de la mettre entre des quotes pour éviter une erreur comme quoi il ne la trouve pas

145071
,

les erreurs sont toujours:

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''users' WHERE 'user_email' = 'contact@ben27.ga'' à la ligne 1 in F:\wamp64\www\ben27\config\includes\bdd\prepare.php on line 23

et

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''users' WHERE 'user_email' = 'contact@ben27.ga'' à la ligne 1 in F:\wamp64\www\ben27\config\includes\bdd\prepare.php on line 23
Default
,

Tu as ajouté un point virgule à la fin de ta requête et tu appel deux fois la fonction excecute sur le PDOStatement.

La correction

<?php   

require_once('../config/includes/bdd/database.php');

/**
* Requête à la base de données.
*/

function prepare($statement) {
    $database = new Database();
    $bdd = $database->BDD();
    $request = $bdd->prepare($statement);
    return $request;
}

function countDatabaseValue($key, $value) {
    $database = new Database();
    $bdd = $database->BDD();
    $request = $bdd->prepare("SELECT * FROM 'users' WHERE :key = :value");
    $request->execute([
      'key' => $key,
      'value' => $value
    ]); 
    return $request->rowCount();
}
?>
145071
,

j'ai toujour l'eurreur au niveau de la récup de $value :/

1