I have an array like:
$postdata[1] = 'This'; $postdata[2] = 'That'; $postdata[3] = 'The other';
And I want to loop through the array and update all of the rows where ID
corresponds to the array key. Like:
foreach ($postdata as $key => $value) { if ($key == 1) { $update = $db->query("UPDATE site_email_templates SET Content='$postdata[1]' WHERE ID = 1"); } else if ($key == 2) { $update = $db->query("UPDATE site_email_templates SET Content='$postdata[2]' WHERE ID = 2"); } else if ($key == 3) { $update = $db->query("UPDATE site_email_templates SET Content='$postdata[3]' WHERE ID = 3"); } }
What would be the simplest way to do this, not particularly knowing how many array keys there are, and keeping it all in one query?
Advertisement
Answer
Note: My answer is based on the PDO driver which in many aspects is better than mysqli. If you need mysqli solution please check the other answer provided by @Your Common Sense
The code below is tested on real environment and served with prepared statement preventing SQL-injection:
$sql = "UPDATE `site_email_templates` SET `Content` = (:content) WHERE `Id` = (:id)"; $stmt = $dbConn->prepare($sql); foreach ($postdata as $id => $content) { $stmt->execute([':id' => $id, ':content' => $content]); }
For more details about SQL injection you can read more:
https://www.owasp.org/index.php/SQL_Injection