From: Jason Woofenden Date: Fri, 6 Nov 2015 16:27:52 +0000 (-0500) Subject: db_connect() defers connecting 'til it's needed X-Git-Url: https://jasonwoof.com/gitweb/?p=wfpl.git;a=commitdiff_plain;h=628ac800da5b09fd96a3578a68418e99ab7449b6 db_connect() defers connecting 'til it's needed --- diff --git a/db.php b/db.php index 5eec706..229fe10 100644 --- a/db.php +++ b/db.php @@ -9,7 +9,8 @@ require_once(__DIR__.'/'.'encode.php'); require_once(__DIR__.'/'.'format.php'); -# db_connect() -- connect to a mysql database +# db_connect() -- connect to a mysql database (automatically, later, when/if needed) +# db_connect_now() -- connect to a mysql database immediately # # PARAMETERS: # @@ -27,12 +28,14 @@ require_once(__DIR__.'/'.'format.php'); # # the database connection handle. You'll only need this if you want to have # multiple databases open at once. - -function db_enc_sql($str) { - return mysqli_real_escape_string(isset($GLOBALS['wfpl_db_handle']) ? $GLOBALS['wfpl_db_handle'] : null, $str); +function db_connect() { + if (isset($GLOBALS['wfpl_db_handle'])) { + mysqli_close($GLOBALS['wfpl_db_handle']); + unset($GLOBALS['wfpl_db_handle']); + } + $GLOBALS['wfpl_db_connect_args'] = func_get_args(); } - -function db_connect($database = 'auto', $user = 'auto', $pass = 'auto', $host = 'localhost', $encoding = 'utf8') { +function db_connect_now($database = 'auto', $user = 'auto', $pass = 'auto', $host = 'localhost', $encoding = 'utf8') { if($database == 'auto') { if(isset($GLOBALS['db_name'])) { $database = $GLOBALS['db_name']; @@ -74,9 +77,25 @@ function db_connect($database = 'auto', $user = 'auto', $pass = 'auto', $host = return $GLOBALS['wfpl_db_handle']; } +# for internal use (helps implement the auto-connect feature of db_connect()) +function _db_connection_needed() { + if (isset($GLOBALS['wfpl_db_handle'])) { + return; + } + if (isset($GLOBALS['wfpl_db_connect_args'])) { + return call_user_func_array(db_connect_now, $GLOBALS['wfpl_db_connect_args']); + } + die('Error: you must call db_connect() or db_auto_connect() first!'); +} + +function db_enc_sql($str) { + _db_connection_needed(); + return mysqli_real_escape_string(isset($GLOBALS['wfpl_db_handle']) ? $GLOBALS['wfpl_db_handle'] : null, $str); +} # Unless you're doing something unusual like an ALTER TABLE don't call this directly function db_send_query($sql) { + _db_connection_needed(); #echo("Sending query: " . enc_html($sql) . "
\n"); $result = mysqli_query($GLOBALS['wfpl_db_handle'], $sql); if(!$result) { @@ -303,6 +322,7 @@ function db_replace($table, $columns, $values) { # return the value mysql made up for the auto_increment field (for the last insert) function db_auto_id() { + _db_connection_needed(); return mysqli_insert_id($GLOBALS['wfpl_db_handle']); }