From 41a81624a226fb3813ebaaec529fef1c2b3a8a5a Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 12 Aug 2017 18:07:47 +0000 Subject: [PATCH] Now deletions will also work with complicated queries --- include/dba.php | 26 +++++++++++++++++--------- mod/display.php | 2 +- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/include/dba.php b/include/dba.php index 36b37498a7..3fff69c2cf 100644 --- a/include/dba.php +++ b/include/dba.php @@ -1080,16 +1080,16 @@ class dba { $callstack[$qkey] = true; // Fetch all rows that are to be deleted - $sql = "SELECT ".self::$dbo->escape($field)." FROM `".$table."` WHERE `". - implode("` = ? AND `", array_keys($param))."` = ?"; + $data = self::select($table, array($field), $param); - $data = self::p($sql, $param); while ($row = self::fetch($data)) { // Now we accumulate the delete commands $retval = self::delete($table, array($field => $row[$field]), true, $callstack); $commands = array_merge($commands, $retval); } + self::close($data); + // Since we had split the delete command we don't need the original command anymore unset($commands[$key]); } @@ -1105,14 +1105,22 @@ class dba { $compacted = array(); $counter = array(); + foreach ($commands AS $command) { - if (count($command['param']) > 1) { - $sql = "DELETE FROM `".$command['table']."` WHERE `". - implode("` = ? AND `", array_keys($command['param']))."` = ?"; + $condition = $command['param']; + $array_element = each($condition); + $array_key = $array_element['key']; + if (is_int($array_key)) { + $condition_string = " WHERE ".array_shift($condition); + } else { + $condition_string = " WHERE `".implode("` = ? AND `", array_keys($condition))."` = ?"; + } - logger(self::replace_parameters($sql, $command['param']), LOGGER_DATA); + if ((count($command['param']) > 1) || is_int($array_key)) { + $sql = "DELETE FROM `".$command['table']."`".$condition_string; + logger(self::replace_parameters($sql, $condition), LOGGER_DATA); - if (!self::e($sql, $command['param'])) { + if (!self::e($sql, $condition)) { if ($do_transaction) { self::rollback(); } @@ -1159,7 +1167,7 @@ class dba { return $commands; } - +// $param /** * @brief Updates rows * diff --git a/mod/display.php b/mod/display.php index 2bae9cf487..59ff7082cf 100644 --- a/mod/display.php +++ b/mod/display.php @@ -81,7 +81,7 @@ function display_init(App $a) { $contactid = get_contact($r['owner-link'], local_user()); if ($contactid) { $items = dba::p("SELECT * FROM `item` WHERE `parent` = ? ORDER BY `id`", $r["id"]); - while ($item = self::fetch($items)) { + while ($item = dba::fetch($items)) { $itemcontactid = get_contact($item['owner-link'], local_user()); if (!$itemcontactid) { $itemcontactid = $contactid;