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.
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 ?
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());
}
}
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(); } ?>
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();
}
?>
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();
}
?>
sauf qu'on ne peut pas mettre le nom d'une table/champs en marqueurs. il faut faire une concaténation.