Méthode prepare pour requête MySQL - FALSE
Thibault_63
Messages postés
6
Statut
Membre
-
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je suis en train de coder la connexion à un espace utilisateur, conditionnée à l'existence d'un couple "pseudo-mot de passe" dans la base de données.
Voilà mon code (ci-dessous), qui ne fonctionne pas puisqu'un message d'erreur apparaît en me disant : Call to a member function execute() on boolean
J'ai essayé toutes les solutions possibles, mais je ne résous jamais l'erreur...
Please help !
Je suis en train de coder la connexion à un espace utilisateur, conditionnée à l'existence d'un couple "pseudo-mot de passe" dans la base de données.
Voilà mon code (ci-dessous), qui ne fonctionne pas puisqu'un message d'erreur apparaît en me disant : Call to a member function execute() on boolean
J'ai essayé toutes les solutions possibles, mais je ne résous jamais l'erreur...
Please help !
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$pass_hache = sha1($_POST['motdepasse']);
$pseudo = $_POST['email'];
$req = $conn->prepare('SELECT ID FROM table_1 WHERE Email = :pseudo AND MDP = :pass_hache');
$req->execute(array('pseudo' => $pseudo,'pass_hache' => $pass_hache));
$resultat = $req->fetch();
if (!$resultat)
{
echo 'Mauvais identifiant ou mot de passe !';
}
else
{
session_start();
$_SESSION['id'] = $resultat['id'];
$_SESSION['pseudo'] = $pseudo;
?>
3 réponses
-
Bonjour
Avec mydqli tu dois utiliser les bindparam au lieu d'un array dans le exécute il me semble.
-
Bonjour
Jordane a raison, mais tu as déjà une erreur avant ce problème là.
Le message dit que tu essayes d'utiliser execute sur un booléen : c'est donc que $req est un booléen, et donc que $conn->prepare a échoué.
Et puisque tu as testé la connexion, il n'y a que le prepare lui-même comme cause d'erreur. Fais afficher le message d'erreur après le prepare, tu auras plus de détails.
Tu te rendras compte qu'avec mysqli, on ne peut utiliser que ? comme paramètre dans les requêtes, pas de noms de variables comme :pseudo et :pass_hache. Une autre différence avec PDO. -
Si jamais tu veux utiliser le prepare et le execute tels que tu les as écrit dans ton précédent code ... pourquoi ne pas passer en PDO au lieu d'utiliser mysqli ?
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs