I am looking for a way to make dynamic queries to my MySQL server. At the moment this is the code I use to update data on the server:
$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);
}
As you can see, the SQL column names are the same as thedeskAttr
keys. I'm looking for a way to make this line a loop so, that I don't need to change this line if I were to add more columns to the MySQL table.
It would look something like this:
$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";
}
How would I write the code above so it will actually work?
**EDIT**
Maybe it will be helpful to know that$deskAttr
is an array of objects, and the name of the columns are the same as the name of the objects keys.
Here is what I mean in 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);
}
Obviously this would add an extra comma at the end of the query before the WHERE part, but hopefully you get what I'm trying to achieve.