diff options
Diffstat (limited to 'includes/mysqli_provider.php')
-rw-r--r-- | includes/mysqli_provider.php | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/includes/mysqli_provider.php b/includes/mysqli_provider.php new file mode 100644 index 00000000..9f901a40 --- /dev/null +++ b/includes/mysqli_provider.php @@ -0,0 +1,186 @@ +<?php + +/** + * Close connection. + */ +function sql_close() { + global $sql_connection; + + return $sql_connection->close(); +} + +/** + * Start new transaction. + */ +function sql_transaction_start() { + global $sql_nested_transaction_level; + + if ($sql_nested_transaction_level ++ == 0) + return sql_query("BEGIN"); + else + return true; +} + +/** + * Commit transaction. + */ +function sql_transaction_commit() { + global $sql_nested_transaction_level; + + if (-- $sql_nested_transaction_level == 0) + return sql_query("COMMIT"); + else + return true; +} + +/** + * Stop transaction, revert database. + */ +function sql_transaction_rollback() { + global $sql_nested_transaction_level; + + if (-- $sql_nested_transaction_level == 0) + return sql_query("ROLLBACK"); + else + return true; +} + +/** + * Logs an sql error. + * + * @param string $message + * @return false + */ +function sql_error($message) { + sql_close(); + + $message = trim($message) . "\n"; + $message .= debug_string_backtrace() . "\n"; + + error_log('mysql_provider error: ' . $message); + + return false; +} + +/** + * Connect to mysql server. + * + * @param string $host + * Host + * @param string $user + * Username + * @param string $pass + * Password + * @param string $db + * DB to select + * @return mysqli The connection handler + */ +function sql_connect($host, $user, $pass, $db) { + global $sql_connection; + + $sql_connection = new mysqli($host, $user, $pass, $db); + if ($sql_connection->connect_errno) + return sql_error("Unable to connect to MySQL: " . $sql_connection->connect_error); + + $result = $sql_connection->query("SET CHARACTER SET utf8;"); + if (! $result) + return sql_error("Unable to set utf8 character set (" . $sql_connection->errno . ") " . $sql_connection->error); + + $result = $sql_connection->set_charset('utf8'); + if (! $result) + return sql_error("Unable to set utf8 names (" . $sql_connection->errno . ") " . $sql_connection->error); + + return $sql_connection; +} + +/** + * Change the selected db in current mysql-connection. + * + * @param + * $db_name + * @return bool true on success, false on error + */ +function sql_select_db($db_name) { + global $sql_connection; + if (! $sql_connection->select_db($db_name)) + return sql_error("No database selected."); + return true; +} + +/** + * MySQL SELECT query + * + * @param string $query + * @return Result array or false on error + */ +function sql_select($query) { + global $sql_connection; + + $result = $sql_connection->query($query); + if ($result) { + $data = array(); + while ($line = $result->fetch_assoc()) + array_push($data, $line); + return $data; + } else + return sql_error("MySQL-query error: " . $query . " (" . $sql_connection->errno . ") " . $sql_connection->error); +} + +/** + * MySQL execute a query + * + * @param string $query + * @return mysqli_result boolean resource or false on error + */ +function sql_query($query) { + global $sql_connection; + + $result = $sql_connection->query($query); + if ($result) { + return $result; + } else + return sql_error("MySQL-query error: " . $query . " (" . $sql_connection->errno . ") " . $sql_connection->error); +} + +/** + * Returns last inserted id. + * + * @return int + */ +function sql_id() { + global $sql_connection; + return $sql_connection->insert_id; +} + +/** + * Escape a string for a sql query. + * + * @param string $query + * @return string + */ +function sql_escape($query) { + global $sql_connection; + return $sql_connection->real_escape_string($query); +} + +/** + * Count query result lines. + * + * @param string $query + * @return int Count of result lines + */ +function sql_num_query($query) { + global $sql_connection; + return sql_query($query)->num_rows; +} + +function sql_select_single_col($query) { + $result = sql_select($query); + return array_map('array_shift', $result); +} + +function sql_select_single_cell($query) { + return array_shift(array_shift(sql_select($query))); +} + +?> |