Requête PDO prepare , update, array
maverick13
Messages postés
9
Statut
Membre
-
maverick13 Messages postés 9 Statut Membre -
maverick13 Messages postés 9 Statut Membre -
Bonjour,
j'aimerais réaliser un truc du genre :
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 )
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
-
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(); ?> -
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.