Méthode prepare pour requête MySQL - FALSE

Fermé
Thibault_63 Messages postés 4 Date d'inscription dimanche 16 juin 2013 Statut Membre Dernière intervention 22 avril 2017 - 22 avril 2017 à 01:27
jordane45 Messages postés 38167 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 7 mai 2024 - 22 avril 2017 à 16:09
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 38167 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 7 mai 2024 4 659
22 avril 2017 à 02:07
Bonjour

Avec mydqli tu dois utiliser les bindparam au lieu d'un array dans le exécute il me semble.
0
Utilisateur anonyme
22 avril 2017 à 02:28
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 38167 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 7 mai 2024 4 659
22 avril 2017 à 16:09
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