IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête préparée PDO [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut Requête préparée PDO
    Bonjour à tous
    Voilà j'ai un problème dans mon script php que je n'arrive pas à résoudre: ce script doit exécuter une requête préparé SQL qui dois modifier la structure d'une table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $codeArticle="exemple";
    $reponse = $bdd->prepare("ALTER TABLE commandes ADD ? INT(3) NOT NULL AFTER 'date_commande'");
    $reponse->execute(array($codeArticle) or die (mysql_error()));
    Une fois exécuté, il me retourne cette erreur:
    Warning: PDOStatement::execute() expects parameter 1 to be array, boolean given in /(...)/debug.php on line 18
    J'ai essayé plusieurs autres syntaxes sur la requête, ça ne change rien.
    Pouvez-vous m'aider ? Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse->execute(array($codeArticle));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut
    Merci. L'erreur n’apparait plus mais la requête ne semble pas avoir aboutie car la modification de structure qu'elle doit faire n'apparait pas dans ma base de données...

    Cela ne viendrais pas de la façon d'écrire la requête ? Merci d'avance pour vos réponses.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu ne peux pas avoir un nom de colonne ou de table comme paramètre d'une requête préparée.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut
    ah d'accord. Je suis donc obligé d'utiliser une requête non préparée pour que cela fonctionne, alors. Y-a-t il un moyen de la sécuriser malgré tous ? Car, sauf si je me trompe, requête non préparée = injection SQL potentielle .

    J'avais lu quelque part qu'il existais une fonction "magic_quotes" mais est-ce bien cela ?

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Sans préparer la requête tu peux la sécuriser manuellement avec PDO::quote()

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut
    Merci ça fonctionne
    Mais il a fallu que je rajoute, dans ma requête SQL, ce genre de quotes ( ` ` ) autour de ma variable pour que ça passe. De plus, des quotes ( ' ' ) apparaissent autour du nom de la nouvelle colonne. Je suis obligé de travailler avec ces quotes ou dois-je utiliser la fonction PDO::quotes() pour d'autres requêtes qui utilisent ces colonnes ?

  8. #8
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Dans la doc : il est dit
    PDO::quote() place des guillemets simples autour d'une chaîne d'entrée, si nécessaire et protège les caractères spéciaux présents dans la chaîne d'entrée, en utilisant le style de protection approprié au pilote courant.
    Donc tu as ta réponse et pour les caractères ``, il est préférable de les mettre autour des noms des tables, colonnes dans la mesure où cela désactive l'interprétateur du moteur de base de donnée.
    Si tu as eu la mauvaise idée de nommer une colonne date (par exemple), sans la protéger tu auras une erreur alors qu'avec `date`, ça passera.
    Généralement, on adopte une convention forte dans le nommage de manière à être certain de ne pas utiliser des mots-clefs du moteur (on emploie des préfixes et/ou des suffixes comme pour une table : t_nom_de_la_table, procédure : p_nom_de_la_procedure, vue : v_nom_de_la_vue...)

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut
    Merci pour l'explication et merci de m'avoir aidé
    Donc pour les noms de colonnes et de tables, toujours utiliser ces quotes ` `.
    c'est noté

    Je passe en Résolu .

  10. #10
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Toujours pas forcément, si tu suis une convention de nommage très stricte, tu peux très bien t'en passer du moment que t'as la certitude de ne pas interférer avec un mot réservé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TinyMCE] Requête préparée pdo
    Par Invité dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 12/03/2014, 21h29
  2. [MySQL] Problème de requête préparée avec PDO
    Par fab56 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/01/2013, 23h06
  3. [PDO] PDO PHP-POO et requêtes préparées
    Par distar dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/01/2012, 20h04
  4. [PDO] Requête préparée via PDO
    Par immat dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/10/2008, 15h01
  5. [PDO] Problème de requête préparée (à n'y rien comprendre?)
    Par waldo2188 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/03/2007, 22h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo