X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FDatabase%2FDBA.php;h=784815f181e774fa07534bef5af3a53f7af56d27;hb=5350e0852d718494934252328d17a094fd1bc73e;hp=46bd871b4a748838beeaf04f706b204f6369f6b2;hpb=aa0b485f3dca72c5448076e913fa54d948cd7731;p=friendica.git diff --git a/src/Database/DBA.php b/src/Database/DBA.php index 46bd871b4a..784815f181 100644 --- a/src/Database/DBA.php +++ b/src/Database/DBA.php @@ -1,6 +1,6 @@ getConnection(); } + /** + * Return the database driver string + * + * @return string with either "pdo" or "mysqli" + */ + public static function getDriver() + { + return DI::dba()->getDriver(); + } + /** * Returns the MySQL server version string * @@ -173,7 +183,7 @@ class DBA /** * Executes a prepared statement that returns data - * Example: $r = p("SELECT * FROM `item` WHERE `guid` = ?", $guid); + * Example: $r = p("SELECT * FROM `post` WHERE `guid` = ?", $guid); * * Please only use it with complicated queries. * For all regular queries please use DBA::select or DBA::exists @@ -280,16 +290,31 @@ class DBA /** * Insert a row into a table * - * @param string|array $table Table name or array [schema => table] - * @param array $param parameter array - * @param bool $on_duplicate_update Do an update on a duplicate entry + * @param string|array $table Table name or array [schema => table] + * @param array $param parameter array + * @param int $duplicate_mode What to do on a duplicated entry + * + * @return boolean was the insert successful? + * @throws \Exception + */ + public static function insert($table, array $param, int $duplicate_mode = Database::INSERT_DEFAULT) + { + return DI::dba()->insert($table, $param, $duplicate_mode); + } + + /** + * Inserts a row with the provided data in the provided table. + * If the data corresponds to an existing row through a UNIQUE or PRIMARY index constraints, it updates the row instead. + * + * @param string|array $table Table name or array [schema => table] + * @param array $param parameter array * * @return boolean was the insert successful? * @throws \Exception */ - public static function insert($table, $param, $on_duplicate_update = false) + public static function replace($table, $param) { - return DI::dba()->insert($table, $param, $on_duplicate_update); + return DI::dba()->replace($table, $param); } /** @@ -363,9 +388,6 @@ class DBA * * @param string|array $table Table name * @param array $conditions Field condition(s) - * @param array $options - * - cascade: If true we delete records in other tables that depend on the one we're deleting through - * relations (default: true) * * @return boolean was the delete successful? * @throws \Exception @@ -399,7 +421,7 @@ class DBA * @param string|array $table Table name or array [schema => table] * @param array $fields contains the fields that are updated * @param array $condition condition array with the key values - * @param array|boolean $old_fields array with the old field values that are about to be replaced (true = update on duplicate) + * @param array|boolean $old_fields array with the old field values that are about to be replaced (true = update on duplicate, false = don't update identical fields) * * @return boolean was the update successfull? * @throws \Exception @@ -453,7 +475,7 @@ class DBA * @return boolean|object * * Example: - * $table = "item"; + * $table = "post"; * $fields = array("id", "uri", "uid", "network"); * * $condition = array("uid" => 1, "network" => 'dspr'); @@ -480,7 +502,7 @@ class DBA * @return int * * Example: - * $table = "item"; + * $table = "post"; * * $condition = ["uid" => 1, "network" => 'dspr']; * or: @@ -654,10 +676,18 @@ class DBA */ public static function mergeConditions(array ...$conditions) { + if (count($conditions) == 1) { + return current($conditions); + } + $conditionStrings = []; $result = []; foreach ($conditions as $key => $condition) { + if (!$condition) { + continue; + } + $condition = self::collapseCondition($condition); $conditionStrings[] = array_shift($condition); @@ -703,7 +733,7 @@ class DBA $order_string = ''; if (isset($params['order'])) { $order_string = " ORDER BY "; - foreach ($params['order'] AS $fields => $order) { + foreach ($params['order'] as $fields => $order) { if ($order === 'RAND()') { $order_string .= "RAND(), "; } elseif (!is_int($fields)) { @@ -734,13 +764,27 @@ class DBA /** * Fills an array with data from a query * - * @param object $stmt statement object - * @param bool $do_close + * @param object $stmt statement object + * @param bool $do_close Close database connection after last row + * @param int $count maximum number of rows to be fetched + * * @return array Data array */ - public static function toArray($stmt, $do_close = true) + public static function toArray($stmt, $do_close = true, int $count = 0) + { + return DI::dba()->toArray($stmt, $do_close, $count); + } + + /** + * Cast field types according to the table definition + * + * @param string $table + * @param array $fields + * @return array casted fields + */ + public static function castFields(string $table, array $fields) { - return DI::dba()->toArray($stmt, $do_close); + return DI::dba()->castFields($table, $fields); } /**