Méthode prepare pour requête MySQL - FALSE

Thibault_63 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38484 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 !


$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

jordane45 Messages postés 38484 Date d'inscription   Statut Modérateur Dernière intervention   4 751
 
Bonjour

Avec mydqli tu dois utiliser les bindparam au lieu d'un array dans le exécute il me semble.
0
Utilisateur anonyme
 
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.
0
jordane45 Messages postés 38484 Date d'inscription   Statut Modérateur Dernière intervention   4 751
 
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
0