5 votes

Requête MySQL dynamique avec PHP

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.

1voto

Sukhwinder Gill Points 2613

Vous pouvez le faire avec une légère modification de votre code en utilisant la fonction implode() de PHP.

Prenez un tableau vide, concaténez les paramètres de mise à jour.

Ensuite, s'il n'est pas vide(), utilisez implode() pour obtenir une chaîne de caractères.

Code mis à jour :

$sql = "UPDATE desk_attributes SET ";
foreach ($deskAttr as $key => $value) {
 $value = mysqli_real_escape_string($link, $value); // $link est la chaîne de connexion à la base de données.
 $key = mysqli_real_escape_string($link, $key); // $link est la chaîne de connexion à la base de données.
 $updtAttrs[] = $key ." = '" . $value . "'";
}
$sql .= ! empty($updtAttrs) ? implode(', ', $updtAttrs) : '';
$sql .= " WHERE id=" . $value->id;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X