note 100479 deleted from mysqli.query by googleguy
| From: | googleguy@php.net | Date: | Tue, 22 Oct 2013 12:16:02 +0000 |
| Subject: | note 100479 deleted from mysqli.query by googleguy | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-197117@lists.php.net to get a copy of this message | ||
Note Submitter: Charlie Chan
----
You can create similar generic statements for updates and deletes.
<?php
function genericUpdate($tablename, $opts, $where) {
$opts = cleanseArray($opts);
$keys = array_keys($opts);
$vals = array_values($opts);
$setString;
$whereString;
for ($i = 0; $i < count($keys); $i++) {
if (in_array($keys[$i], $where)) {
if (!isset($whereString))
$whereString = $keys[$i]." = '".$vals[$i]."'";
else
$whereString = $whereString." AND ".$keys[$i]." =
'".$vals[$i]."'";
} else {
if (!isset($setString))
$setString = $keys[$i]." = '".$vals[$i]."'";
else
$setString = $setString.", ".$keys[$i]." =
'".$vals[$i]."'";
}
}
$sql = "UPDATE $tablename SET ".$setString." WHERE ".$whereString;
logDebug("SQL TO Update KEYS: ".$sql);
return dbQuery($sql);
}
function genericDelete($tablename, $opts) {
$opts = cleanseArray($opts);
$keys = array_keys($opts);
$vals = array_values($opts);
$whereString;
for ($i = 0; $i < count($keys); $i++) {
if ($i == (count($keys) - 1))
$whereString = $whereString.$keys[$i]." = '".$vals[$i]."'";
else
$whereString = $whereString.$keys[$i]." = '".$vals[$i]."' AND ";
}
$sql = "DELETE FROM ". $tablename . " WHERE " . $whereString;
logDebug("SQL TO DELETE KEYS: ".$sql);
return dbQuery($sql);
}
?>
Just be sure that you cleanse your arrays before input into DB.
<?php
function cleansePureString($str, $char = '\\')
{
///[^a-zA-Z0-9\s]/ NON ALPHA
$cleansed = preg_replace("/[%_'\"]/", '', $str); //_, % and '
//logDebug("CLEANSED VAL: ".$cleansed);
return $cleansed;
}
function cleanseArray($opts) {
$cleansedArray = array();
$keys = array_keys($opts);
$vals = array_values($opts);
for ($i = 0; $i < count($keys); $i++) {
$newKey = cleansePureString($keys[$i],"'");
$newVal = cleansePureString($vals[$i],"'");
$cleansedArray[$newKey] = $newVal;
}
return $cleansedArray;
}
?>