Requête PDO prepare , update, array

Fermé
maverick13 Messages postés 9 Date d'inscription lundi 5 novembre 2012 Statut Membre Dernière intervention 6 avril 2013 - 11 déc. 2012 à 01:22
maverick13 Messages postés 9 Date d'inscription lundi 5 novembre 2012 Statut Membre Dernière intervention 6 avril 2013 - 11 déc. 2012 à 15:41
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

Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
Modifié par Atropa le 11/12/2012 à 06:40
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
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
11 déc. 2012 à 06:34
c'est un exemple d'utilisation avec une table user et les valeurs sont bidons
0
maverick13 Messages postés 9 Date d'inscription lundi 5 novembre 2012 Statut Membre Dernière intervention 6 avril 2013
11 déc. 2012 à 15:41
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