]> git.mxchange.org Git - mailer.git/blobdiff - inc/db/lib-mysqli.php
Don't abuse isValidSqlLink() for checking results
[mailer.git] / inc / db / lib-mysqli.php
index 02d0c8e5da12fbe5aaf47debb4f22bc48ab8ef66..200c58b79c207905a0fd13c47f6052a675964a0f 100644 (file)
  * -------------------------------------------------------------------- *
  * Kurzbeschreibung  : Datenbankschicht fuer MySQL 3/4/5 Server (MySQLi)*
  * -------------------------------------------------------------------- *
- * $Revision::                                                        $ *
- * $Date::                                                            $ *
- * $Tag:: 0.2.1-FINAL                                                 $ *
- * $Author::                                                          $ *
- * -------------------------------------------------------------------- *
  * Copyright (c) 2003 - 2009 by Roland Haeder                           *
- * Copyright (c) 2009 - 2013 by Mailer Developer Team                   *
+ * Copyright (c) 2009 - 2016 by Mailer Developer Team                   *
  * For more information visit: http://mxchange.org                      *
  *                                                                      *
  * This program is free software; you can redistribute it and/or modify *
@@ -69,7 +64,9 @@ function sqlQuery ($sqlString, $file, $line, $enableCodes = TRUE) {
                $sqlStringModified = str_replace(array(chr(9), PHP_EOL, chr(13)), array(' ', ' ', ' '), $sqlStringModified);
 
                // Compile config entries out
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlStringModified=' . $sqlStringModified . ',enableCodes=' . intval($enableCodes));
                $sqlStringModified = sqlPrepareQueryString($sqlStringModified, $enableCodes);
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlStringModified=' . $sqlStringModified . ',enableCodes=' . intval($enableCodes));
 
                // Cache it and remember as last SQL query
                $GLOBALS[__FUNCTION__][$sqlString] = $sqlStringModified;
@@ -93,8 +90,8 @@ function sqlQuery ($sqlString, $file, $line, $enableCodes = TRUE) {
        // Run SQL command
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'file=' . basename($file) . ',line=' . $line . ',sql=' . $GLOBALS['last_sql']);
        $result = mysqli_query(getSqlLink(), $GLOBALS['last_sql'])
-               or sqlError($file, $line, 'file='. basename($file) . ',line=' . $line . ':mysqli_error()=' . mysqli_error() . ',last_query=' . $GLOBALS['last_sql']);
-       //* DEBUG: */ logDebugMessage($file, $line, 'sql=' . $GLOBALS['last_sql'] . ',affected=' . sqlAffectedRows() . ',numRows='.(isValidSqlLink($result) ? sqlNumRows($result) : gettype($result)));
+               or logSqlError($file, $line, 'file='. basename($file) . ',line=' . $line . ':mysqli_error()=' . mysqli_error(getSqlLink()) . ',last_query=' . $GLOBALS['last_sql']);
+       //* DEBUG: */ logDebugMessage($file, $line, 'sql=' . $GLOBALS['last_sql'] . ',affected=' . sqlAffectedRows() . ',numRows='.(isValidSqlResult($result) ? sqlNumRows($result) : gettype($result)));
 
        // Calculate query time
        $queryTime = microtime(TRUE) - $querytimeBefore;
@@ -121,7 +118,7 @@ function sqlQuery ($sqlString, $file, $line, $enableCodes = TRUE) {
                } // END - if
 
                // Append debug line
-               appendLineToFile(getCachePath() . 'mysql.log', basename($file) . '|LINE=' . $line . '|NUM=' . (isValidSqlLink($result) ? sqlNumRows($result) : 'false') . '|AFFECTED=' . sqlAffectedRows() . '|QUERYTIME:' . ($queryTime * 1000) . 'ms): ' . str_replace(array(chr(13), PHP_EOL), array('', ' '), $GLOBALS['last_sql']));
+               appendLineToFile(getCachePath() . 'mysql.log', basename($file) . '|LINE=' . $line . '|NUM=' . (isValidSqlResult($result) ? sqlNumRows($result) : 'false') . '|AFFECTED=' . sqlAffectedRows() . '|QUERYTIME:' . ($queryTime * 1000) . 'ms): ' . str_replace(array(chr(13), PHP_EOL), array('', ' '), $GLOBALS['last_sql']));
        } // END - if
 
        // Increment stats entry
@@ -158,7 +155,7 @@ function sqlAffectedRows () {
 // SQL fetch row
 function sqlFetchRow ($resource) {
        // Is $resource valid?
-       if ((!isValidSqlLink($resource)) || (!isSqlLinkUp())) return FALSE;
+       if ((!isValidSqlResult($resource)) || (!isSqlLinkUp())) return FALSE;
 
        // Fetch the data and return it
        return mysqli_fetch_row($resource);
@@ -167,7 +164,7 @@ function sqlFetchRow ($resource) {
 // SQL fetch array
 function sqlFetchArray ($resource) {
        // Is $resource valid?
-       if ((!isValidSqlLink($resource)) || (!isSqlLinkUp())) return FALSE;
+       if ((!isValidSqlResult($resource)) || (!isSqlLinkUp())) return FALSE;
 
        // Load row as array from database
        $row = mysqli_fetch_assoc($resource);
@@ -185,7 +182,7 @@ function sqlFetchArray ($resource) {
 // SQL result
 function sqlResult ($resource, $row, $field = '0') {
        // Is $resource valid?
-       if ((!isValidSqlLink($resource)) || (!isSqlLinkUp())) return FALSE;
+       if ((!isValidSqlResult($resource)) || (!isSqlLinkUp())) return FALSE;
 
        // Run the result command
        $result = mysqli_result($resource, $row, $field);
@@ -197,7 +194,7 @@ function sqlResult ($resource, $row, $field = '0') {
 // SQL connect
 function sqlConnectToDatabase ($host, $login, $password, $file, $line) {
        // Try to connect
-       $linkResource = mysqli_connect($host, $login, $password) or sqlError($file, $line,  mysqli_error());
+       $linkResource = mysqli_connect($host, $login, $password) or logSqlError($file, $line,  mysqli_error(getSqlLink()));
 
        // Set the link resource
        if ($linkResource instanceof mysqli) {
@@ -216,6 +213,9 @@ function sqlConnectToDatabase ($host, $login, $password, $file, $line) {
        `character_set_connection`='utf8',
        `character_set_database`='utf8',
        `character_set_server`='utf8'", $file . ':' . __FUNCTION__, $line . ':' . __LINE__);
+
+               // Disallow subtraction for unsigned columns
+               sqlQuery("SET `sql_mode`='NO_UNSIGNED_SUBTRACTION'", $file . ':' . __FUNCTION__, $line . ':' . __LINE__);
        } // END - if
 
        // Any errors encountered?
@@ -236,7 +236,7 @@ function sqlSelectDatabase ($dbName, $file, $line) {
 
        // Return the result
        //* DEBUG: */ logDebugMessage($file . ':' . __FUNCTION__, $line . ':' . __LINE__, 'Selecting database ' . $dbName);
-       return mysqli_select_db(getSqlLink(), $dbName) or sqlError($file, $line,  mysqli_error());
+       return mysqli_select_db(getSqlLink(), $dbName) or logSqlError($file, $line,  mysqli_error(getSqlLink()));
 }
 
 // SQL close link
@@ -249,7 +249,7 @@ function sqlCloseLink ($file, $line) {
        } // END - if
 
        // Close database link and forget the link
-       $close = mysqli_close(getSqlLink()) or sqlError($file . ':' . __FUNCTION__, $line . ':' . __LINE__, mysqli_error());
+       $close = mysqli_close(getSqlLink()) or logSqlError($file . ':' . __FUNCTION__, $line . ':' . __LINE__, mysqli_error(getSqlLink()));
 
        // Close link in this layer
        unsetSqlLinkUp(__FUNCTION__, __LINE__);
@@ -261,7 +261,7 @@ function sqlCloseLink ($file, $line) {
 
 // SQL free result
 function sqlFreeResult ($resource) {
-       if ((!isValidSqlLink($resource)) || (!isSqlLinkUp())) {
+       if ((!isValidSqlResult($resource)) || (!isSqlLinkUp())) {
                // Abort here
                return FALSE;
        } // END - if
@@ -338,49 +338,31 @@ function sqlEscapeString ($str, $secureString = TRUE, $strip = TRUE) {
        return $GLOBALS['sql_escapes']['' . $str . ''];
 }
 
-// Log SQL errors to debug.log in installation phase or call reportBug()
-function sqlError ($file, $line, $message) {
+// Set SQL error in global array
+function setSqlError ($file, $line, $message) {
        // Remember plain error in last_sql_error
-       $GLOBALS['last_sql_error'] = mysqli_error();
-
-       // Is login set?
-       if (!empty($GLOBALS['mysql']['login'])) {
-               // Secure login name in message
-               $message = str_replace($GLOBALS['mysql']['login'], '***', $message);
-       } // END - if
+       $GLOBALS['last_sql_error'] = mysqli_error(getSqlLink());
+}
 
-       // Is database password set?
-       if (!empty($GLOBALS['mysql']['password'])) {
-               // Secure password in message
-               $message = str_replace($GLOBALS['mysql']['password'], '***', $message);
-       } // END - if
+// Checks whether given link is a valid SQL link
+function isValidSqlLink ($linkInstance) {
+       // Is it an object?
+       $isValid = ($linkInstance instanceof mysqli);
 
-       // Is database name set?
-       if (!empty($GLOBALS['mysql']['dbase'])) {
-               // Secure database name in message
-               $message = str_replace($GLOBALS['mysql']['dbase'], '***', $message);
-       } // END - if
+       // Debug message
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'linkInstance[]=' . gettype($linkInstance). ',isValid=' . intval($isValid));
 
-       // Is there installation phase?
-       if (isInstaller()) {
-               /*
-                * In installation phase, we don't want SQL errors abort e.g. connection
-                * tests, so just log it away.
-                */
-               logDebugMessage($file, $line, $message);
-       } else {
-               // Regular mode, then call reportBug()
-               reportBug($file, $line, $message);
-       }
+       // Return result
+       return $isValid;
 }
 
-// Checks whether given link is a valid SQL link
-function isValidSqlLink ($linkInstance) {
+// Checks whether given result is really a result
+function isValidSqlResult ($resultInstance) {
        // Is it a resource?
-       $isValid = (($linkInstance instanceof mysqli) || ($linkInstance instanceof mysqli_result));
+       $isValid = ($resultInstance instanceof mysqli_result);
 
        // Debug message
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'linkInstance[]=' . gettype($linkInstance). ',isValid=' . intval($isValid));
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'resultInstance[]=' . gettype($resultInstance). ',isValid=' . intval($isValid));
 
        // Return result
        return $isValid;