Echappement dans paramètres d'une PS

sanceray3
Invité n'ayant pas de compte PHPfrance

14 sept. 2009, 12:49

Bonjour à tous,

voilà je vous explique mon problème.

J'ai crée une procédure stockée dans le but de faire du SQL dynamique et plus précisemment des Insert "dynamiques". Elle se présente de la manière suivante :

Procédure stockée

Code : Tout sélectionner

DROP PROCEDURE IF EXISTS `sqlDynInsert`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `sqlDynInsert`(IN asTable VARCHAR(50), IN asColonne VARCHAR(50), IN asValeur VARCHAR(100)) BEGIN DECLARE cmd VARCHAR(255); SET @lsSql = CONCAT('INSERT INTO ',asTable,'(',asColonne,') VALUES ("',asValeur,'")'); PREPARE cmd FROM @lsSql; EXECUTE cmd; DEALLOCATE PREPARE cmd; END $$
Elle fonctionne très bien mais uniquement lorsque je lui passe un seul élément dans les paramètres. Je m'explique.

Cas de figure qui fonctionne :

Code : Tout sélectionner

CALL sqlDynInsert('dossiers', 'prenom', 'nicolas')
Cas de figure qui ne fonctionne pas :

Code : Tout sélectionner

CALL sqlDynInsert('dossiers', 'titre,prenom', "'M','Nicolas'")
Le problème vient apparemment des valeurs passées. J'ai essayé dans tous les sens, avec des "\", des simples / doubles quotes.... Mais je ne m'en sors pas. Il semble m'interprêter mes deux éléments comme un seul et unique élément qui contiendrait des quotes.

J'ai un retour m'indiquant "Column count doesn't match value count"

Selon vous, comment puis je faire pour pouvoir passer autant d'éléments que je le souhaite dans ce cas de figure.

Par avance grand merci de votre aide.

Petit nouveau ! | 5 Messages

15 sept. 2009, 14:24

tu peux me fournir la structure de la table pour que je puisse faire des tests ?