Bonjour les gars, comme le titre l'indique, je cherche un moyen de faire des requêtes dynamiques à mon serveur MySQL. Pour l'instant, voici le code que j'utilise pour mettre à jour les données sur le serveur :
$deskAttr = json_decode($_POST["desk_attributes"]);
foreach($deskAttr as $key => $value) {
$sql = "UPDATE desk_attributes SET iw_standard=".$value->iw_standard.", avaya_standard=".$value->avaya_standard.", avaya_withcallid=".$value->avaya_withcallid.", avaya_withtransfer=".$value->avaya_withtransfer.", dual_screen=".$value->dual_screen.", air_conditioning=".$value->air_conditioning.", iw_obdialler=".$value->iw_obdialler." WHERE id=".$value->id;
$conn->query($sql);
}
Comme vous pouvez le constater, les noms de colonnes SQL sont les mêmes que les clés deskAttr
. Je cherche un moyen de transformer cette ligne en boucle pour ne pas avoir à la modifier si je devais ajouter plus de colonnes à la table MySQL.
Cela ressemblerait à quelque chose comme ça :
$deskAttr = json_decode($_POST["desk_attributes"]);
foreach($deskAttr as $key => $value) {
$sql = "UPDATE desk_attributes SET";
foreach($value as $k => $v) {
$sql .= " $k = $value->$k ,";
}
$sql .= "WHERE id=".$value->id";
}
Comment écrirais-je le code ci-dessus pour qu'il fonctionne réellement ? Merci.
MODIFICATION
Il serait peut-être utile de savoir que $deskAttr
est un tableau d'objets et que le nom des colonnes est le même que le nom des clés des objets.
Voici ce que je veux dire en pseudo code :
foreach($object in $deskAttr) {
$sql = "UPDATE table SET ";
foreach($key in $object) {
if($key != "id")
$sql .= "$key = $object->$key, ";
}
$sql .= "WHERE id = $object->id;
$conn->query($sql);
}
Évidemment, cela ajouterait une virgule supplémentaire à la fin de la requête avant la partie WHERE, mais j'espère que vous comprenez ce que j'essaie d'accomplir.