Impossible utiliser variable dans requete SQL

[Résolu/Fermé]
Signaler
-
Messages postés
195
Date d'inscription
mercredi 27 avril 2011
Statut
Membre
Dernière intervention
5 mars 2013
-
Bonjour,
désolé pour le titre mais je manquais de place
j'ai pioché dans un site un script php de codage qui fonctionne a merveille et qui utilise les variable $encrypt et $décrypt mais je n'arrive pas a utiliser ces variable pour des requetes SQL , voila le code :
$bdd->exec('CREATE TABLE IF NOT EXISTS test( $encrypt VARCHAR(50))');
la requete ce fait , le message indiquant le succès est afficher mais la colonne est $encrypt et non son contenu...
après avoir essayer "echo" cela ne marche toujour pas
merci d'avence pour vos réponses


11 réponses

Messages postés
195
Date d'inscription
mercredi 27 avril 2011
Statut
Membre
Dernière intervention
5 mars 2013
36
Bonjour,

Je suis pas un crack dans le domaine mais selon moi il faut faire la requête en deux temps.

$req = $bdd->prepare('CREATE TABLE IF NOT EXISTS test( :encrypt VARCHAR(50))');

$req->execute(array('encrypt' => $encrypt));


Petit explication : On prépare la requête avec la/les variable(s) mais elle n'est défini qu'au moment de l'exécution. On passe la/les variable(s) dans un tableau. Ce qui est pratique c'est que c'est plutôt bien sécurisé contre les injections SQL ^^

Y a peut-être une meilleur solution...
mysql me répond qu'il y a une violancion d'accès
( Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''£ ¥è¢ãr_y;x' VARCHAR(50))' at line 1
que faire?
Messages postés
195
Date d'inscription
mercredi 27 avril 2011
Statut
Membre
Dernière intervention
5 mars 2013
36
Arf... J'ai prévenu je suis pas un crack ^^""

Sinon tu peut essayer comme ceci :

$reqSQL = 'CREATE TABLE IF NOT EXISTS test(' . $encrypt . 'VARCHAR(50))';

$bdd->execute($reqSQL);


La ce coup si c'est plus PDO qui injecte la variable mais tu prépare directe la requête. J'espère que ce coup ci ça va fonctionné. Attention quand même dans un cas comme cela c'est très critique au niveau sécurité (si toute foi ça marche XD)
cette fois c'est PDO qui n'est pas content....
Fatal error: Call to undefined method PDO::execute() in C:\wamp\www\test.php on line 106
^^
Messages postés
195
Date d'inscription
mercredi 27 avril 2011
Statut
Membre
Dernière intervention
5 mars 2013
36
Oui c'est normal j'ai fait une grosse faut T_T

$bdd->exec($reqSQL); (et non $bdd->execute($reqSQL);)
think for yourself, question authority...
on revient au point de départ ,

Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '©§ ¢-- «¡i©qVARCHAR(50))' at line 1

je peut vous donner le script de codage au cas ou : http://www.phpcs.com/codes/CRYPATGE-DECRYPTAGE-TEXTE_26693.aspx
Messages postés
195
Date d'inscription
mercredi 27 avril 2011
Statut
Membre
Dernière intervention
5 mars 2013
36
Dans la variable $encrypt il y a quoi ? C'est une chaîne crypté ? avec plein de caractère bizarre ?
C'est surement pour cela que ça me fonctionne pas SQL ne veux que des caractères précis pour ces noms de colonne.

Je sais pas ce que tu cherche a faire exactement mais ce script SQL demande la création d'une table test (si elle n'existe pas) avec une colonne don le nom serait la variable $encrypte...

C'ets bien cela que tu veux faire ?
oui c'est cela mais la chaine cryptée contien que des caractère bizarres , je vais cherché une clée qui ne crypte qu'en caractère visible et je poste la réponse
c'est impossible de trouver une clé qui ne génère pas de texte bizarre , je cherche un autre script de cryptage moins complexe
re bonjour
maintenant j'ai un code qui encrypte les mots en chiffres et lettres problème : le typr de donnée SQL n'est que texte ou que chiffres , y'a t-il une solution a ce problème?
PS : cette requete marche très bien ^^

$req = $bdd->prepare('CREATE TABLE IF NOT EXISTS test( :encrypt VARCHAR(50))');

$req->execute(array('encrypt' => $encrypt));

merci
et voilà!!
après maint et maint éssai , j'ai réussi!
en fait , c'est VARCHAR qui bloquais , je l'ai remplacé par TEXT
ensuite la ligne

$req = $bdd->prepare('CREATE TABLE IF NOT EXISTS test( :encrypt VARCHAR(50))');

n'allais pas , je l'ai remplacé par

$req = $bdd->prepare('CREATE TABLE IF NOT EXISTS test( ' . $encrypt . ' VARCHAR(50))');

et enfin j'ai remplace les chiffres , les majuscules et les caractères spéciaux en suite de lettres (pour le décodage) car en lettres cela n'aurait pas convenu au moments du décodage

bref , merci beaucoup a ZHP pour ces solutions qui m'ont beaucoup aidées

cordialement
Messages postés
195
Date d'inscription
mercredi 27 avril 2011
Statut
Membre
Dernière intervention
5 mars 2013
36
Merci, je n'est pas fait grand chose ^^"

si c'est bon passe le post en résolu

A+