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éponses


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

Je les mit try

Et cela ne change rien

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

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 ?

bah je ne vois aucun return dans la fonction

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

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());
        }
    }

Ahh d'accord. Mercii

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

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.

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(); } ?>

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

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

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();
}
?>

Commente cette ligne

$request->execute($values);

dans ta fonction

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

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

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();
}
?>

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

sauf qu'on ne peut pas mettre le nom d'une table/champs en marqueurs. il faut faire une concaténation.

Oui je suis d'accord mais cest la valeur qui fait une erreur ($valeur)