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, suppression des quotes [PDO]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 34
    Points : 30
    Points
    30
    Par défaut Requête préparée, suppression des quotes
    Bonjour,

    J’essaie sans succès d'écrire un script php qui insérerait des données dans une table, en utilisant la méthode des Requête préparée. J'arrive à passer les paramètres VALUE(?,?,?) sans problèmes mais par contre j’essaie en vain de passer le nom d'une table dans la préparation de la requête. Dans la requête SQL il ne faut pas qu'elle soit entouré de quotes, mais je n'arrive pas a m'en débarrasser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php 
    $table = 'user';
    $first_name = 'Gros';
    $last_name = 'Minet';
    $email = 'cartoon@gmail.com';
     
    try {
    	$dbh = new PDO('mysql:host=localhost;dbname=newdb', 'mon_user', 'pon_pswd');
    	$dbh->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
     
    	$sql = "INSERT INTO ? (first_name, last_name, email) VALUE(?,?,?)";
    	$sq = $dbh->prepare ( $sql );
    	$sq->execute(array(
    			$table,
    			$first_name,
    			$last_name,
    			$email)
    	);
    } catch ( PDOException $e ) {
    	echo 'ERREUR : ' . $e->getMessage ();
    }
    ?>
    Au final ma requete SQL est:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO 'user' (first_name, last_name, email) VALUE('Gros','Minet','cartoon@gmail.com')
    et cela ne marche pas, il faudrait:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO user (first_name, last_name, email) VALUE('Gros','Minet','cartoon@gmail.com')

    J'ai beau chercher sur le net, je n'y arrive pas. Peut être que cela n'a pas d’intérêt(Je peux imaginer sortir cette variable de la préparation de la requête), mais je suis un peu têtu.

    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce n'est pas possible : la préparation d'une requête exige de connaitre le nom des tables.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 34
    Points : 30
    Points
    30
    Par défaut
    Merci pour la réponse, est ce que je peux en conclure qu'il n'y a pas d’intérêt à passer par une préparation de requête quand je ne manipule pas les données de la table(SELECT, INSERT...) mais les tables elles mêmes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "TRUNCATE $db_table";
    $sq = $dbh->prepare ( $sql );
    $sq->execute ();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "TRUNCATE $db_table";
    $dbh->exec($sql);

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Non il n'y a pas d'intérêt puisque la préparation consiste à faire une abstraction des données de la requête.
    L'abstraction des données permet deux choses :
    - plus grande rapidité d'exécution pour les requêtes multiples (typiquement dans une boucle).
    - Meilleure sécurité pour protéger la requête des données utilisateurs.

    Si ta requête est unique, la requête préparée n'est donc utile que pour protéger la requête des données externes.
    Si les données sont internes ou à fortiori s'il n'y a pas de données la préparation n'a aucun intérêt.


    Dans ton cas si tu voulais faire une requête dynamique avec les noms de tables dynamiques il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = "INSERT INTO $table (first_name, last_name, email) VALUE(?,?,?)";
    $sq = $dbh->prepare ( $sql );
    $sq->execute(array(
    $first_name,
    $last_name,
    $email)
    );
    (Il faut mettre ta variable $table directement dans la requête mais pas comme un marqueur)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 34
    Points : 30
    Points
    30
    Par défaut
    Ok, merci encore.

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

Discussions similaires

  1. [XL-2003] Export feuille Excel format Text, suppression des quotes
    Par blepy dans le forum Excel
    Réponses: 3
    Dernier message: 08/07/2014, 09h32
  2. Faire des requêtes préparées avec l'extension mysql
    Par stealth35 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 3
    Dernier message: 03/03/2011, 02h15
  3. Requête de suppression des doublons
    Par deleterz dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/08/2010, 18h40
  4. Réponses: 3
    Dernier message: 26/07/2009, 10h06
  5. [MySQL] Pourquoi dois-je utiliser des "quotes penchées" dans mes requêtes?
    Par v4np13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/02/2008, 23h23

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