Requête PDO prepare , update, array

maverick13 Messages postés 9 Statut Membre -  
maverick13 Messages postés 9 Statut Membre -
Bonjour,

j'aimerais réaliser un truc du genre :

  $value =array ("","$cc","$dd","$ee","$ff"); 
		  
		   $Sql = new Sql(SQL_HOST,SQL_DB,SQL_USER,SQL_PASS);
			$req = $Sql->prepare('UPDATE recettes SET *');
			if($Sql->execute($req,$value)) return messConfirm('Tous est GOod');
			
			else return messError('Etrange...');          
            // on ferme la connexion
            mysql_close();


Je sait que : prepare('UPDATE recettes SET *') n"est pas bon.

Mais j'aimerais ne pas avoir à spécifier chaque champ de ma base de donné et tous simplement toute l'updater avec les donnés de l'array !

j'ai beaucoup de colonne dans ma BDD et je me voie mal toute les spécifier avec un genre de :

exec('UPDATE 'comptes' SET 'solde' = 'solde', etc... , etc...

Merci de vos lumières.
( chez cherché quelques heures sans rien trouver d'intéressant )

2 réponses

  1. Atropa Messages postés 2051 Statut Membre 274
     
    bonjour,

    j'ai une idée mais je ne sais pas si ce est très propre...

    <?php 
    
    	function update(&$Sql,$table,$vals,$columnsIgnored = array()) {
    	/*
    		1 - $Sql : Ressource -> reférence Class Sql
    		2 - $table : String -> nom de la table
    		3 - $vals : Array -> valeurs correspondant aux champs dans l'ordre en sautant ceux qui sont passéscandir
    		4 - $columnsIgnored : Array -> Colonnes ignorées
    		
    		retourne un objet sous la forme ou false si il n'y a pas de champs
    		$o->updateSet contenant la partie SET de la requête 'champs1=:champs1,champs2=:champs2,champs3=:champs3'
    		$o->values un array sous la forme $o->values = array(champs1 => 'value1',champs2 => 'value2',champs3 => 'value3')
    	*/
    
    		$reqChamps = $Sql->prepare('SHOW COLUMNS FROM '.$table);
    		$Sql->execute($reqChamps);
    		
    		$o->updateSet = '';
    		$o->values = array();
    		$i = 0;
    		while($data = $reqChamps->fetch(PDO::FETCH_OBJ)) {
    			if(in_array($data->Field,$columnsIgnored) || !isset($vals[$i])) continue;
    			$o->updateSet .= $data->Field.'=:'.$data->Field.',';
    			$o->values[$data->Field] = $vals[$i];
    			$i++;
    		}
    		$reqChamps->closeCursor();
    		$o->updateSet = substr($o->updateSet,0,-1);
    		if($o->updateSet === false) return false;
    		return $o;
    	}
      
     $table = 'user'; 
     $values = array(1,2,3,4,5,6,7,8,9,10); 
      
      
     $Sql = new Sql(SQL_HOST,SQL_DB,SQL_USERREAD,SQL_PASSREAD); 
     $o = update($Sql,$table,$values,array('id','name')); 
      
     $o->values['id'] = 20; 
      
     $req = $Sql->prepare('UPDATE '.$table.' SET '.$o->updateSet.' WHERE id =:id LIMIT 1'); 
     $Sql->execute($req,$o->values); 
     $req->closeCursor(); 
    
    ?>
    0
    1. Atropa Messages postés 2051 Statut Membre 274
       
      c'est un exemple d'utilisation avec une table user et les valeurs sont bidons
      0
  2. maverick13 Messages postés 9 Statut Membre
     
    Dommage je croyais que si ont suivait l'ordre d'apparition des colonnes on pouvait faire comme :

      $value= array("","$today","$bb","$cc","$dd","$ee"); 
    		  
      $Sql = new Sql(SQL_HOST,SQL_DB,SQL_USER,SQL_PASS);
    $req = $Sql->prepare('INSERT INTO recettes VALUES(?,?,?,?,?,?)');
    if($Sql->execute($req,$value)) return messConfirm('Tous est GOod');


    Avec un update à la place. ...On dirais que non, dommage.
    Merci du code Atropa je vais l'étudier.
    0