Create database avec PDO

Create database avec PDO - PHP - Programmation

Marsh Posté le 02-11-2010 à 15:44:46    

Bonjour,

 

Je voudrais créer une base de donnée en passant par un script PHP et en utilisant PDO,
donc j'ai fait mon code:

 

Code : PHP - Sélectionner
 

Code :
  1. <?php
  2. $pseudo = 'test';
  3. $req = $bdd -> prepare("CREATE DATABASE IF NOT EXISTS `:pseudo`" );
  4. $req -> execute(array('pseudo' => $pseudo));
  5. $req -> closeCursor();
  6. ?>
 

Sauf que lorsque je vais voir si la base a était créer, elle s'appelle 'test' et non pas test comme je le souhaitais.
Je suis presque sur que c'est un problème avec ` dans ma requête et que les ' qui sont rajouter au nom viennent de mon array, mais si j'enlève les ' de 'pseudo' c'est comme si : pseudo n'exister pas et donc ma db n'est pas créer.

 

Je pourrais très bien faire ceci:

 

Code : PHP - Sélectionner

 
Code :
  1. <?php
  2. ('CREATE DATABASE IF NOT EXISTS `' . $pseudo . '`')
  3. ?>
 

Mais il y a plus de risque d'injection SQL.

 

Auriez vous svp une solution? Tout en restant sur du PDO

 

Merci d'avance,

Message cité 1 fois
Message édité par B4RL1V3 le 02-11-2010 à 16:57:41
Reply

Marsh Posté le 02-11-2010 à 15:44:46   

Reply

Marsh Posté le 02-11-2010 à 16:45:26    

A moins que tu sois en train de réaliser un outils permettant de gérer des bases de données, et deux ou trois autres cas très particuliers, je ne vois pas pourquoi tu aurais besoin de créer une table. Et le fait que son nom soit déterminé par une variable 'pseudo' est d'autant plus inquiétant. C'est pour faire quoi exactement ? Il doit probablement exister une meilleur solution à ton problème.
 
Sinon pour répondre à ta question, tu observes un comportement parfaitement normal.


Message édité par dwogsi le 02-11-2010 à 16:46:50

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 02-11-2010 à 16:49:33    

C'est pour créer une base de donnée au utilisateurs qui souhaite en obtenir une tout simplement pour leur site.
On ma parler de faire une requête simple (avec query) et de la protéger avec quote() puis de retirer le 1er et dernier caractère qui serait donc 2 apostrophes ( ' et ' ) en utilisant substr() mais je ne vois pas comment mettre ce code en place.

 

Je sais, une requête préparée place des apostrophes pour protéger la requête des injections mais si je veux créer une db je ne sais pas comment faire vu que je doit mettre 2 ` autour du nom et la requête préparée ajoute 2 apostrophes autour du nom si je fais une requête en fonction d'un variable.
Contrairement à se que je souhaite vu que je ne veux pas que ma db s'appelle 'test' mais test (sans les apostrophes).

 

Merci,


Message édité par B4RL1V3 le 02-11-2010 à 16:59:50
Reply

Marsh Posté le 02-11-2010 à 21:03:42    

Vous avez une solution svp?

Reply

Marsh Posté le 06-11-2010 à 23:53:13    

Essaye la version avec avec ?, qui permet de remplacer une valeur.
 
J'ai toujours utilisé ? et non :mavariable, et j'ai jamais eu ce problème.

Reply

Marsh Posté le 07-11-2010 à 14:51:02    

C'est pareille mais c'est bon j'ai trouver la solution.
Merci quand même,

Reply

Marsh Posté le 08-11-2010 à 07:54:52    

B4RL1V3 a écrit :


 

Code :
  1. <?php
  2. $req = $bdd -> prepare("CREATE DATABASE IF NOT EXISTS `:pseudo`" );
  3. ?>



 

Tu échappes deux fois le nom de ta table, là : une fois à la main en écrivant les `, et une fois via ta variable.
Essaye ça :

 
Code :
  1. $req = $bdd -> prepare("CREATE DATABASE IF NOT EXISTS :pseudo" );


Message édité par skeye le 08-11-2010 à 07:55:15

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 08-11-2010 à 12:49:15    

je sais sauf que ça ne marche pas mais j'ai trouver merci quand même.

Reply

Marsh Posté le 23-06-2015 à 11:03:33    

Salut,
Désolé du up, mais je me pose la même question que B4RL1V3.
Apparemment il avait trouvé une solution mais il ne l'a pas publié :(
Queulqu'un peut m'aider?
Merci!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed