2009-10-03 11 views
0

Je reçois une erreur lorsque je suis en train de courir ceci:commandes préparées avec des fonctions syntaxe

mysql> prepare stmt1 from "UPDATE test.users SET password = password('?') WHERE usrid = ?"; 
mysql> prepare stmt1 from "UPDATE test.users SET password = password(?) WHERE usrid = ?"; 

Comment puis-je faire une déclaration préparée où une fonction prend ma variable comme argument?

Répondre

2

Vous devez ajouter quelques guillemets autour de votre déclaration préparée:

mysql> PREPARE stmt_name FROM "SELECT name FROM Country WHERE code = ?"; 
Query OK, 0 rows affected (0.09 sec) 
Statement prepared 

mysql> SET @test_parm = "FIN"; 
Query OK, 0 rows affected (0.00 sec) 

mysql> EXECUTE stmt_name USING @test_parm; 
+---------+ 
| name | 
+---------+ 
| Finland | 
+---------+ 
1 row in set (0.03 sec) 

mysql> DEALLOCATE PREPARE stmt_name; 
Query OK, 0 rows affected (0.00 sec) 
+0

Merci, vous avez attrapé l'erreur de syntaxe, mais ma vraie question portait sur l'incorporation de fonctions dans l'instruction. Merci. –

+0

Eh bien, avez-vous essayé de l'appeler? –

+0

Quelle erreur obtenez-vous maintenant que la syntaxe est fixée? –

0

Maintenant que l'erreur de syntaxe brute (manquante entre guillemets la chaîne préparée) est fixée, la question décide de « comment obtenir un argument dans une fonction dans une déclaration préparée ", je crois.

Le premier exemple transmet la chaîne de mot de passe '?' à la fonction de mot de passe - c'est probablement pas ce que vous aviez en tête. Le deuxième exemple transmet la première valeur donnée à l'instruction quand elle est exécutée à la fonction de mot de passe, et la seconde valeur est utilisée pour identifier le usrid concerné. Ceci suppose une interprétation standard de SQL - Je ne vois aucune raison de penser que cela ne s'appliquera pas à MySQL.

Questions connexes