2009-09-22 8 views
1

Ok, je deviens fou sur celui-ci. MySQL lance un ajustement sur ce bit de SQL:MySQL rejeter le paramètre

INSERT INTO `test_table` 
    (`column1`, `column2`) 
VALUES 
    (?COURSEID, ?COURSENAME) 

Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'COURSENAME)' à la ligne 1

Mon code de débogage montre les deux valeurs de paramètres remplies.

+1

Il serait utile de connaître le SQL exact en cours d'exécution au lieu de ces valeurs d'espace réservé ... – Charles

Répondre

2

MySQL ne supporte pas les espaces réservés aux paramètres nommés. Vous pouvez utiliser uniquement des espaces réservés pour les paramètres positionnels. Autrement dit, un espace réservé est juste un symbole ?.

Ceci est d'ailleurs conforme au comportement ANSI SQL. Les SGBDR comme Oracle prennent en charge les paramètres nommés en tant qu'extension de la norme.

+0

Bill, je crois que vous avez identifié le problème. Dans le passé j'avais utilisé des paramètres nommés avec MySQL, mais je ne l'avais fait qu'avec le pilote MySQL pour .NET. Dans ce cas, j'utilise le pilote ODBC et j'ai l'impression qu'il ne gère pas les paramètres nommés de la même manière. Merci pour la tête pensante, je ne savais pas que les paramètres nommés ne faisaient pas officiellement partie de SQL. –

+0

À droite, si le pilote .NET prend en charge les paramètres nommés, il doit réécrire la chaîne de requête avant de l'envoyer au serveur MySQL. La bibliothèque PDO de PHP fait quelque chose de similaire, donc vous pouvez utiliser des paramètres nommés avec n'importe quel backend, même s'il ne supporte pas les paramètres nommés. Mais il est difficile d'obtenir ce type de réécriture de requête, par exemple un littéral de chaîne peut contenir des caractères qui ressemblent à un paramètre de paramètre, donc l'analyse de la requête dans le pilote doit être assez intelligente pour faire la différence. –

0

Vous ne savez pas si cela va fonctionner. Je changerais soit à

VALEURS

OU

valeurs (?,?) (: Courseid,: courseName)

+0

: coursid est la syntaxe Oracle, ne sais pas pour les autres –

Questions connexes