Echappement dans paramètres d'une PS

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Echappement dans paramètres d'une PS

Re: Echappement dans paramètres d'une PS

par mouins » 15 sept. 2009, 14:24

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

Echappement dans paramètres d'une PS

par sanceray3 » 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.