Qu'est-ce qui ne va pas dans la syntaxe de cet UPDATE ?

Bonjour,

Je ne sais pas à l'avance quel champ je dois updater.
Donc je fais ça :
Code:
 $update="
  UPDATE  
  `annuaire` 
  SET 
  '".$paysAncien."'='".$paysAncien."'+1 ";
  mysql_query($update);

Ca n'update pas. Donc ça vient des variables dans le set.

Quelle est la bonne syntaxe, s'il vous plait ?
 
peut-être parce que tu ne spécifies pas quel annuaire doit être updaté..

Code:
$update=" 
  UPDATE  
  `annuaire` 
  SET 
  '".$paysAncien."'='".$paysAncien."'+1 " where id_annuaire = 'id annuaire' ";
  mysql_query($update);
 
Bonsoir, quel est le message d'erreur ?

Tu n'as pas de clause WHERE à appliquer ?

Il ne faut pas de quote simple autour du nom du champ à incrémenter dans la requête SQL :

Code:
$update="
  UPDATE 
  `annuaire`
  SET
  ".$paysAncien."=".$paysAncien."+1 ";
  mysql_query($update);
 
Non alors, ça ne doit pas bon comme syntaxe, parce que j'ai tout vérifié, j'ai affiché $paysAncien et j'ai rajouté le WHERE que j'avais omis et ça ne fonctionne pas.

Etes vous certains que l'on peut utiliser des variables comme ça dans une requête SQL ?
 
$paysancien doit être le nom d'un champ de la table :
update nom_table set champ = champ + 1

=> en php :

$sql = "update nom_table set $champ = $champ + 1";
 
Je ne comprend pas ta réponse Didier_S.
$paysAncien est en effet le nom du champs à updater. Tu me suggères quoi ? D'enlever les ' ".." ' ?


Voilà le dernier code testé, au complet :

Code:
  if($specialiteAancienne==0)
  {$update="
  UPDATE  
  `categorieAnnuaire` 
  SET 
  '".$paysAncien."'='".$paysAncien."'+1 
  WHERE rang='".$sA."'";
  mysql_query($update); 

//on vérifie si l'instruction est bien effectuée et si les données sont correctes :
  echo' '.$paysAncien.' -'.$sA.' ;
  }

Donc là, le test en bas est effectué et les données sont correctes. Mais la requête n'update pas.
 
ok, la variable $paysancien contient bien le nom du champ, essayes
Code:
$update="
  UPDATE 
  `categorieAnnuaire`
  SET
  `".$paysAncien."`=`".$paysAncien."`+1
  WHERE rang='".$sA."'";
  mysql_query($update);
note que dans ce cas, ta requete est entourée de double-quotes, donc tu peux écrire plus simplement :
Code:
$update="
  UPDATE 
  `categorieAnnuaire`
  SET
  `$paysAncien`=`$paysAncien`+1
  WHERE rang='$sA'";
  mysql_query($update);
avant ton mysql_query, fais
Code:
echo $update;
(pour voir si ta requete est bien formée, et
Code:
echo mysql_error();
(après mysql_query) pour voir si l'exécution de la requete a retourné des erreurs.
 
Ok, ça fonctionne, j'ai donc fait comme ça :
Code:
SET 
`".$paysAncien."`='".$paysAncien."'+1


Merci beaucoup Didier_S :D
 
Non en fait ça ne fonctionne pas. Je viens de me rendre compte du bug :

Ca n'incrémente ou ne décrémente pas le compteur.

Ca update et ça marque 1.

Si il y avait 3, ça ne marque pas 4, mais 1.

Quand je veux décrémenter, si j'avais 3 ça ne marque pas 2 mais -1.
 
En mettant des guillemets sur $paysAncien (du coté droit) tu rend une valeur qui n'est pas numérique, à laquelle tu ajoutes ou retires 1.
Essaies en les enlevant, ou en mettant des ` à la place si ça ne marche pas
 
Sans quoi, exactement ?

J'ai essayé ça aussi : `".($paysAncien+1)."`mais ça ne fonctionne pas non plus, ça n'update plus rien.
 
Tu peux me noter l'état actuel de ta requête et je te la corrige dessuite et sinon teste avec le +1 mais en mettant des espaces.
 
La dernière en date, c'est celle-ci :

Code:
  if($specialiteAancienne==0)
  {$update="
  UPDATE  
  `categorieAnnuaire` 
  SET 
  `".$paysAncien."`=`".($paysAncien+1)."`
  WHERE rang='".$sA."'";
  mysql_query($update); 
  }

Donc là, ça n'update plus rien du tout. Le but étant comme j'ai dit que ça incrémente de 1 le compteur, or au mieux, pour l'instant, ça a affiché 1 quel que soit le chiffre précédent... :?

**edit**
des espaces où ça ?
 
Je la ferais comme ça :

Code:
if($specialiteAancienne==0) 
{
   $update=mysql_query(" UPDATE categorieAnnuaire SET paysAncien='".($paysAncien + 1)."' WHERE rang='".$sA."'"; 
}

Je crois que l'erreur viens de `".$paysAncien."`=`".($paysAncien+1)."` à mon avis ton champ en base doit d'appeler paysAncien et non s'appeler la valeur de $paysAncien

Sinon les ` ne servent à rien ou presque, pour les valeurs à donner utilise des '
 
Non c'est pas possible ça, Silef, parce que j'ai 4 champs et je ne sais pas à l'avance lequel je dois updater.

Donc j'ai besoin de la variable à gauche du SET.

D'ailleurs de ce côté ça fonctionne. C'est du côté droit que ça ne fonctionne pas.
 
Le truc c'est que si tu n'as pas d'erreur mysql et que ça update un peu tout et n'importe quoi : c'est ta requête qui n'est pas bonne et non sa structure.

Perso c'est cette histoire de
Code:
SET ".$mavariable."='".$mavariable + 1."'
qui me plait pas du tout.
 
Bah je comprend bien, mais bon le problème concerne le coté droit, pas le gauche. C'est le bon champ qui est updaté, mais pas de la bonne valeur.
 
Je suis comme silef, y'a un truc illogique dans ton ordre d'UPDATE.

Si ta variable $mavariable est égale à 2 par exemple ca fait un truc du genre :

Code:
SET 2='2+1'

je vois difficilement dans quel cas un ordre pareil peut être utilisé perso 8O
 
Si mes variables étaient correctement interprêtée, ma requête ne signifierait rien d'autre que :

Code:
Set Belgique = Belgique + 1

ça n'a rien d'extraordinaire, qu'est ce qui vous choque.
 
Meeuuuhhh a dit:
Sans quoi, exactement ?

J'ai essayé ça aussi : `".($paysAncien+1)."`mais ça ne fonctionne pas non plus, ça n'update plus rien.

ça
Code:
mysql_query("UPDATE categorieAnnuaire SET $paysAncien = $paysAncien + 1 WHERE rang = '$sA' ");
 
Je m'incruste :)
Si $paysAncien est le nom du champ (de la colonne dans ta table quoi), comment peux-tu y ajouter 1 ???
Dans l'insctruction MySQL, tu dois avoir qqch comme :
Code:
... SET colonne1 = valeur1, colonne2=valeur2, ...
 
xdeslandes a dit:
Je m'incruste :)
Si $paysAncien est le nom du champ (de la colonne dans ta table quoi), comment peux-tu y ajouter 1 ???
Dans l'insctruction MySQL, tu dois avoir qqch comme :
Code:
... SET colonne1 = valeur1, colonne2=valeur2, ...

Je pensais pareil mais en fait tu peux (apparemment) utiliser cette syntaxe :


Code:
SET monchamp = monchamp + 1

Ce dont je n'étais pas sûr, n'ayant jamais eu l'occasion de le faire.
 
Ca fonctionne comme ça !

Code:
  if($specialiteAancienne==0)
  {$update="
  UPDATE 
  `categorieAnnuaire`
  SET
  $paysAncien=$paysAncien+1
  WHERE rang='".$sA."'";
  mysql_query($update);
  }

Donc ni quote, ni point ni guillemets autour des variables.
 
petit rappel :

les ` servent à délimiter les noms de tables et champs, ce qui permet de les "protèger" on peut alors utiliser le nom de champ `FROM` ou `WHERE` et sont facultatifs, si tant est qu'on utilise pas FROM WHERE ou autre nom de commande dans ces noms

les ' (simples quotes) servent à délimiter les valeurs littérales des champs comme dans cet exemple :

Code:
$q="UPDATE `matable` SET `monchamp`='la valeur de mon champ' WHERE `id`='le champ que je veux'"

les ` et ' ne sont là que pour signifier à MySQL que les caractères qu'ils délimitent sont des valeurs, ou des noms de champs ou tables.

en php, lorsqu'une chaine est délimité par " (double quotes), les variables qu'elle contient sont remplacées par leur valeur :
Code:
$nom = "Bond";
echo "Mon nom est $nom, James $nom";
//affichera :
//Mon nom est Bond, James Bond

donc, logiquement, ces codes ci dessous sont tous équivalents et fonctionneront tous dans ton cas :
Code:
$update="UPDATE `categorieAnnuaire` SET $paysAncien=$paysAncien+1 WHERE rang='".$sA."'";

Code:
$update="UPDATE categorieAnnuaire SET $paysAncien=$paysAncien+1 WHERE rang='$sA'";
ou encore
Code:
$update="UPDATE `categorieAnnuaire` SET `$paysAncien`=`$paysAncien`+1 WHERE `rang`='$sA'";
[/code]

tout ça c'est dans les docs...
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut