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

Langage PHP Discussion :

Requêtes préparées INSERT INTO ou UPDATE et variable


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 801
    Points : 189
    Points
    189
    Par défaut Requêtes préparées INSERT INTO ou UPDATE et variable
    Bonsoir.

    Je reviens sur ce forum pour vous demander si c'est possible d'utiliser une variable dans une requête préparée.

    Avec la commande UPDATE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $var1 = "nom = :nom, prenom = :prenom, adresse = :adresse, cp = :cp, telephone = :telephone";
    $var2 = " ':nom' => nom, ':prenom' => prenom, ':adresse' => adresse, ':cp' => cp, ':telephone' => telephone";
    $req = $bdd->prepare("UPDATE ma_table SET ".$ var1." WHERE id = $id");
    $req->execute(array($var2));
    OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var3 = "nom ='$nom', prenom ='$prenom', adresse ='$adresse', cp ='$cp', telephone ='$telephone' ";
    $sql = 'UPDATE personnes SET'. $var3.' WHERE id =$id;
    $requete=$bdd->query($sql);
    Pour ces 2 exemples la table n'est pas modifiée et pas de message d'erreur.

    Avec la commande INSERT INTO.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $var4 : " 'DUPONT','Pierre','1 rue du Ruisseau','77000','01 02 03 04 05' ";
    $var5 : "nom, prenom, adresse, cp, telephone";
    $sth = $bdd->prepare("INSERT INTO ma_table ($var5) VALUES($var4)");
    $sth->execute();
    OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth = $bdd->exec("INSERT INTO personnes ($var4) VALUES($var5)");
    Pour ces 2 exemples rien n'est inséré dans la table et pas de message d'erreur.

    Je m'adresse à vous après avoir fait divers test mais je désespère et ne comprends pas pourquoi ça ne fonctionne pas.

    Pourriez-vous me donner une explication svp.

    Merci d'avance pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    d'abord, tu t'y prends mal. Un array n'est pas une chaine de caractères (ton $var2).

    1- UPDATE :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $string_columns_holders = 'nom = :nom, prenom = :prenom, adresse = :adresse, cp = :cp, telephone = :telephone';  // string/chaine
    $array_params = array( ':nom' => $nom, ':prenom' => $prenom, ':adresse' => $adresse, ':cp' => $cp, ':telephone' => $telephone ); // array
    $array_params[] = ':id' => $id; // on ajoute id à l'array
     
    $update_sql = "UPDATE ma_table SET ".$string_columns_holders." WHERE id = :id ";
    $req = $bdd->prepare( $update_sql );
    $req->execute( $array_params );
    Pour voir ce que contiennent la requête et l'array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo $sql;
    var_dump($array_params);
    2- INSERT :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $string_columns = 'nom, prenom, adresse, cp, telephone';  // string/chaine
    $string_holders = ':nom, :prenom, :adresse, :cp, :telephone';  // string/chaine
    $array_params = array( ':nom' => $nom, ':prenom' => $prenom, ':adresse' => $adresse, ':cp' => $cp, ':telephone' => $telephone ); // array
    // ICI, PAS d'id à ajouter  !
     
    $insert_sql = "INSERT INTO ma_table ($string_columns) VALUES ($string_holders)"
    $req = $bdd->prepare( insert_sql );
    $req->execute( $array_params );

    3- Normal que tu n'aies pas de message d'erreur : tu ne l'as pas demandé !
    Il faut utiliser try catch pour attraper les exceptions.

    Il faut d'abord l'activer au moment de la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,		// rapport d'erreurs sous forme d'exceptions
    (exemple de connexion PDO ici)
    Dernière modification par Invité ; 16/03/2018 à 10h06.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 801
    Points : 189
    Points
    189
    Par défaut
    Bonjour,

    Merci beaucoup pour vos réponses je vais les tester et je vous ferais part du résultat.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 801
    Points : 189
    Points
    189
    Par défaut
    Bonjour jreaux62,

    J'ai testé INSER INTO ça fonctionne.

    Par contre avec UPDATE si une ou toutes les variables sont vides ça efface les données.

    Si je fais une requête avec le code ci-dessous cela modifie bien le champ nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->exec("UPDATE ma_table SET nom='DURAND' WHERE id = 1");
    Mais, la syntaxe d'une requête pour modifier uniquement que le ou les variables renseignées dans le formulaire, je ne trouve pas !

    Avez-vous une solution svp.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il faut connaître les bases :


  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 801
    Points : 189
    Points
    189
    Par défaut
    Bonjour.

    Je reviens sur cette discussion car j'ai un petit souci avec le bout de code suivant :
    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
    if(isset($_POST['insérer'])){
    		foreach($_POST as $index=>$valeur){
    			if ($valeur != 'Insérer' && $index != 'id'){
    				$tableau2[] = $index; 
    				$tableau3[] = ":".$index; 
    				$tableau5[] = "':".$index."' => ".$index; 
    			} 				
    		}
    	}
    	@$string_columns = implode(",",$tableau2);
    	@$string_holders  = implode(", ",$tableau3);	
    	@$array_params   = implode(", ",$tableau5);	
    	$insert_sql = "INSERT INTO personnes ($string_columns) VALUES ($string_holders)";
    	$req = $bdd->prepare( $insert_sql );
    	$req->execute( $array_params );
    Par contre avec cette variable ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array_params = array( ':nom' => $nom, ':prenom' => $prenom, ':adresse' => $adresse, ':cp' => $cp, ':telephone' => $telephone );
    Merci d'avance pour une petite explication.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    				$tableau5[':'.$index] = $valeur; 
    ...
    	$array_params   = $tableau5;	// c'est un array !
    Et enlève les @, qui ne font que masquer les warning.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 801
    Points : 189
    Points
    189
    Par défaut
    Merci beaucoup de nous faire partager votre savoir jreaux62.

    Je viens de tester ça fonctionne super nickel chrome !

    Merci aussi pour les cours et tutoriels PHP !

    Sujet

Discussions similaires

  1. Réponses: 31
    Dernier message: 29/04/2014, 10h40
  2. Transformer insert into en update
    Par DeZanGe dans le forum Langage SQL
    Réponses: 13
    Dernier message: 04/12/2007, 10h18
  3. Requête SQL Insert Into
    Par jjg65 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 07/11/2007, 09h35
  4. [Requête + VBA] INSERT INTO autre base
    Par Zartak dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/05/2007, 15h29
  5. [Requête] Problème INSERT INTO
    Par lerico dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 10/01/2006, 18h12

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