IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

pb insertion: erreur de syntaxe virgule et point virgule


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut pb insertion: erreur de syntaxe virgule et point virgule
    Bonjour,
    j'ai un problème d'insertion des données de type text et html dans un champ de type LONGTXT.
    voici l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public 'error' => string '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 ''<p>
     
    	Haec subinde Constantius audiens et quaedam referente Thalassio doc' at line 1' (length=226)
      public 'queryId' => boolean false
    l'erreur et plus au moins claire j'ai essayer depuis d'utilisé toutes les fonctions de protection quote la désactivation code html ... sans résultats
    j'ai pensé d'une autre façon ,j'ai crée deux fonction qui s'occupent des virgules, les point virgules et slash
    voici le code de la function addslashes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function addText($txt)
    		{
    			if(get_magic_quotes_gpc()==false)
    					{
    					return utf8_encode(addslashes($txt));
    					}else{
    					return utf8_encode($txt);
    					}
     
    		}
    le code de la function protect virgules:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    		function protect_virgules($txt)
    		{
    			if($txt!='')
    			{
    				$x = strlen($txt);
    				$newTxt = '';
    				for($i=0;$i<=$x;$i++)
    				{
    						if($txt[$i]==',' || $txt[$i] == ';')
    						{
     
    							$newTxt.= '\\'.$txt[$i];
    						}
    						else
    						{
    							$newTxt.=$txt[$i];
    						}
    				}
    				return htmlentities($newTxt);				
    			}
    			else
    			return '0';
    		}
    toujours l'erreur de syntaxe m'attrape à la gorge
    pourriez vous m'aider
    bien cordialement

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    le seul truc que tu as à gérer c'est les ' ou " qui délimitent du texte en sql

    tu devrais abandonner l'extension mysql, qui va être abandonnée, pour te connecter à mysql mais plutôt mysqli ou pdo qui possède des fonctions d'échappement

    sinon tu as mysql_real_escape_string()

  3. #3
    Membre régulier
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    tout d'abord merci bien pour votre réponse,
    je n'utilise pas PDO pour gérer mes requêtes j'utilise des méthodes classic
    j'aimerai bien rajouter quelques information.
    voici la fonction qui s'occupe du traitement de l'insertion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public function insert($table,$data){  
    
        $this->last_insert_id = NULL;
    
        $fields = "";
        $values = "";
        foreach($data as $fld => $val){
            $values .= trim($this -> escape($val)).",";
             $fields .= $fld.",";
    
        }
        $values = '"'.substr($values,0,strlen($values)-1).'"';
        $fields = '"'.substr($fields,0,strlen($fields)-1).'"';
        $tab=array($this->escape($table),$fields,$values,"@last_id");
        $this->CALL_SP("sp_insert",$tab);
        if ( $result = mysqli_query( $this->linkId, "SELECT @last_id AS last_inserted_id" ) ) {
            while ($row = mysqli_fetch_assoc($result))
            {
                $this->last_insert_id = $row['last_inserted_id'];
            }
        }
    
        return  $this->queryId;
    }
    la fonction escape exécute mysql_real_escape_string() , et voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public function escape($var){
            if(get_magic_quotes_gpc()){
        		$var = stripslashes($var);
        	}
     
        	$this -> connect();
        	$return = mysqli_real_escape_string($this->linkId,$var);
        	switch(strtoupper($var)){
        		case 'NULL':
        		case 'NOW()':
        		case 'CURDATE()':
        		case 'CURTIME()':
        		case 'UNIX_TIMESTAMP()':
        		return $var;
        	}
     
            return "'".$return."'";
        }
    en fin la fonction qui s'occupe de l'insertion réellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     BEGIN
     SET @stmt_sql=CONCAT("INSERT INTO ", tableName, "  (",fields,")VALUES(", param ,")");
     PREPARE stmt FROM @stmt_sql;
     EXECUTE stmt;
     DEALLOCATE PREPARE stmt;
     SELECT LAST_INSERT_ID() into last_id;
    END

  4. #4
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    donc ton code utilise mysqli vu que tu utilises en plus des procédures stocker donc il ne faut utiliser que les fonctions liées à mysqli (pas de addslashes, stripslashes, etc...)

    sans envoyer ta chaine affiche la pour voir ce qui est échappé ou pas
    dedans tu ne dois pas avoir de ' ou "" sans une \ devant

  5. #5
    Membre régulier
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    Bonjoyur
    Merci pour votre réponse.
    mais comment gérer mes slash ? car la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqli_real_escape_string()
    gère cette liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    :\n 	Fin de ligne (LF ou 0x0A (10) en ASCII)
    \r 	Retour à la ligne (CR ou 0x0D (13) en ASCII)
    \t 	Tabulation horizontale (HT or 0x09 (9) en ASCII)
    \v 	Tabulation verticale (VT ou 0x0B (11) en ASCII) (depuis PHP 5.2.5)
    \e 	échappement (ESC or 0x1B (27) en ASCII) (depuis PHP 5.4.0)
    \f 	Saut de page (FF ou 0x0C (12) en ASCII) (depuis PHP 5.2.5)
    \\ 	Antislash
    \$ 	Signe dollar
    \"      Guillemet double
    je peux trouver la liste des fonction lié a mysqli ? j'ai bien lu dans la doc de mysqli ,selon mes yeux aucune fonction ne gère simple cote.
    est ce que je peux gérer tout ça par une fonction ?

  6. #6
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    tes petits yeux doivent être très fatigués alors:


Discussions similaires

  1. [XL-2010] Fichier CSV en virgule vers point virgule
    Par Dolchan dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/07/2012, 14h15
  2. Séparateur virgule ou point virgule pour validation données
    Par steelspirit dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/09/2010, 11h47
  3. Séparateur virgule ou point virgule pour validation données
    Par INeedHelp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/05/2008, 11h12
  4. erreur de syntaxe dans l'instructiuon insert into
    Par greg64 dans le forum Access
    Réponses: 6
    Dernier message: 13/04/2006, 14h07
  5. [SQL2K][BCK] erreur de syntax pour update et insert
    Par lifecraft dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/02/2006, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo