Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/02/2011, 14h42   #1
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Par défaut Compréhension du message d'erreur

Bonjour/ bonsoir,

Je suis dans l'apprentissage de PDO. Pour ce faire, j'ai un simple formulaire:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
<?php if(!empty ($_POST)){
    if($auth->login($_POST));
}
 else {
     echo 'Mauvais identifiant !';
} 
//------------------------------------------------------------------------
?>
<form name="formIdent" id="formIdent" method="post" action="#">
            <label>
                Votre identifiant :
                <input type="text" name="login" id="login">
            </label>
            <label>
                Votre mot de passe :
                <input type="password" name="password" id="password">
            </label>
            <label>
                <input type="submit" name="connect" id="connect" value="Connexion !">
            </label>
        </form>
Dont les valeurs retournées sont gérées par la classe suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
class Auth {
 
    function login($data) {
        global $PDO;
        $select = $PDO->prepare('SELECT * FROM users
            WHERE login = :login AND password = :password');
        $result = $select->execute($data);
        $result = $select->fetchAll();
        var_dump($result);
    }
}
$auth = new Auth();
J'obtiens le message d'erreur suivant:
Citation:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\wamp\www\...
...
Auth->login( $data = array ('login' => 'admin', 'password' => 'admin', 'connect' => 'Connexion !') )
PDOStatement->execute( array ('login' => 'admin', 'password' => 'admin', 'connect' => 'Connexion !') )
Je crois comprendre que le nombre de paramètres de la requête ne correspond pas au nombre qu'elle doit traiter... Est-ce à dire que l'index "'connect' => 'Connexion !'" est de trop ? (je ne vois que ça...) Mais dans ce cas, comment corriger cela ?
merci,
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 14h47   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
C'est bien ton submit qui est en trop.
Transmettre tout le $_POST n'est pas une bonne idée, tu te retrouveras souvent avec plus de champ que necessaire dans la requête.
Code :
$auth->login(array($_POST['login'], $_POST['password']);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 15h03   #3
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Par défaut re:

Merci. Mais si j'écris ça maintenant:
Code :
1
2
3
4
5
6
7
 $select = $PDO->prepare('SELECT * FROM users
            WHERE login = :login AND password = :password');
        $select->bindParam(':login', $_POST['login'], PDO::PARAM_STR);
        $select->bindParam(':password', $_POST['password'], PDO::PARAM_STR);
        $select->execute();
        $result = $select->fetchAll();
        var_dump($result);
C'est aussi fonctionnel, et peut-être plus recommandé, non ?
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 15h58   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
C'est pareil.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h17.


 
 
 
 
Partenaires

Hébergement Web