2014-04-16 6 views
-1

Comment mettre à jour une table dans la base de données où la clause SET de la requête MySQL dépend des variables? Cela peut être un $ var, deux ou plusieurs autres.dynamic sql UPDATE query

Voici mon ex. Code:

$name = 'comp_name = "'.$nume.'",'; 
$large = 'logolarge = "'.$linklogolarge.'",'; 
$small = 'logosmall = "'.$linklogosmall.'",'; 

............................... 

$sql = 'UPDATE company 
    SET 
      '.$name.' 
      '.$large.' 
      '.$small.' 
    WHERE id_comp = 43 '; 

Le problème est que la syntaxe normale de la requête UPDATE est que, après SET ....... entre les valeurs a besoin d'une virgule ""

ex.

UPDATE table 
    SET 
    col1 = x , 
    col2 = y , 
    col3 = z 
    WHERE id = 4 

et à la fin avant WHERE ne doit pas un ..... (ex. Après « z »)

Alors, comment puis-je faire la requête SQL pour accepter différentes combinaisons de ces $ var ... (seulement '. $ name.' ou '. $ name.' et '. $ large.' ou seulement deux derniers '. $ large.' et '. $ petit.' .... etc)

fondamentalement toute combinaison entre ces 3 var ... et peut-être combiner plus de 3 var.

+0

Désolé, je ne suis pas sûr de ce que vous demandez. Possible de clarifier? Vous voudrez peut-être vérifier la syntaxe 'update' de mysql (http://dev.mysql.com/doc/refman/5.0/fr/update.html). – showdev

Répondre

1
$name = "comp_name = '$nume'"; 
$large = "logolarge = '$linklogolarge'"; 
$small = "logosmall = '$linklogosmall'"; 

$sql = "UPDATE company SET " . $name; 
if(! is_null($linklogolarge)) $sql = $sql . ", " . $large; 
if(! is_null($linklogosmall)) $sql = $sql . ", " . $small; 

$where = " WHERE id_comp = 43"; /* change this if required*/ 
$sql = $sql . $where; 

echo $sql; 
+0

merci pour l'aide ... mais cette méthode ne fonctionne que si vous avez $ name pas NULL tout le temps ... Je cherchais un code pour permettre tout type de combinaison ... et peut-être avec plus de 3 $ var – ADU77

+0

C'est seulement un processus manuel. La manière possible est comme ce que j'ai suggéré. Et, définissez un 'booléen' pour vérifier si au moins une valeur de colonne est définie. Si faux, n'exécute pas de requête. –