Créer une table avec une requête préparée
Fermé
[TiDi]
Messages postés
126
Date d'inscription
samedi 19 octobre 2013
Statut
Membre
Dernière intervention
17 juillet 2016
-
9 févr. 2014 à 01:30
Utilisateur anonyme - 9 févr. 2014 à 11:21
Utilisateur anonyme - 9 févr. 2014 à 11:21
A voir également:
- Créer une table avec une requête préparée
- Table ascii - Guide
- Créer une liste déroulante excel - Guide
- Créer une adresse hotmail - Guide
- Créer un compte gmail - Guide
- Créer une table des matières word - Guide
2 réponses
Utilisateur anonyme
Modifié par le père. le 9/02/2014 à 09:00
Modifié par le père. le 9/02/2014 à 09:00
Bonjour
Pas possible. Pour les requêtes préparées, un marqueur (:nom) peut être utilisé seulement à la place de valeurs, pas de mots clés SQL ni d'identificateurs. Or les noms de bases et de tables sont des identificateurs.
Extrait de la doc mysql :
"Parameter markers can be used only where data values should appear, not for SQL keywords, identifiers, and so forth."
Par contre, tu peux très bien obtenir le même résultat par concaténation, ou avec des double quotes, après avoir vérifié très soigneusement que $nom était un nom acceptable, et de préférence en l'entourant d'accents graves :
Pas possible. Pour les requêtes préparées, un marqueur (:nom) peut être utilisé seulement à la place de valeurs, pas de mots clés SQL ni d'identificateurs. Or les noms de bases et de tables sont des identificateurs.
Extrait de la doc mysql :
"Parameter markers can be used only where data values should appear, not for SQL keywords, identifiers, and so forth."
Par contre, tu peux très bien obtenir le même résultat par concaténation, ou avec des double quotes, après avoir vérifié très soigneusement que $nom était un nom acceptable, et de préférence en l'entourant d'accents graves :
$bdd->exec("CREATE TABLE '$nom' (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE=INNODB;");
Utilisateur anonyme
9 févr. 2014 à 11:21
9 févr. 2014 à 11:21
Non. Il y a bien la fonction PDO::quote(), mais elle aussi ne sert que pour les données.
C'est déjà bizarre de laisser l'utilisateur rentrer un nom de table à créer (tu refais phpMySQL ?), es-tu sûr d'en avoir vraiment besoin ?
Si tu es sûr, ne peux-tu pas forcer ton utilisateur à se limiter à des choses "raisonnables" ? C'est facile en php de vérifier qu'il n'y a pas de trucs trop exotiques dans une chaîne.
Pour référence, ce qui est autorisé : https://dev.mysql.com/doc/refman/5.0/fr/legal-names.html
Note que comme tu as droit à "ce qui est autorisé dans un nom de dossier / fichier", ça dépend du système d'exploitation de ton serveur. Il vaut mieux être beaucoup plus restrictif pour passer partout.
C'est déjà bizarre de laisser l'utilisateur rentrer un nom de table à créer (tu refais phpMySQL ?), es-tu sûr d'en avoir vraiment besoin ?
Si tu es sûr, ne peux-tu pas forcer ton utilisateur à se limiter à des choses "raisonnables" ? C'est facile en php de vérifier qu'il n'y a pas de trucs trop exotiques dans une chaîne.
Pour référence, ce qui est autorisé : https://dev.mysql.com/doc/refman/5.0/fr/legal-names.html
Note que comme tu as droit à "ce qui est autorisé dans un nom de dossier / fichier", ça dépend du système d'exploitation de ton serveur. Il vaut mieux être beaucoup plus restrictif pour passer partout.
9 févr. 2014 à 10:49