Fixed a lot typos, thanks to profi-concept
[mailer.git] / inc / db / lib-mysql3.php
index dda331836a367bacc955cae726653cfa2b6d493e..8d0ee5f467477c1b0700e9800f285203f611c026 100644 (file)
@@ -38,8 +38,11 @@ if (!defined('__SECURITY')) {
 }
 
 // SQL queries
-function SQL_QUERY($sql_string, $F, $L) {
-       global $link, $CSS, $_CONFIG, $OK;
+function SQL_QUERY ($sql_string, $F, $L) {
+       global $link, $CSS, $OK;
+
+       // Link is up?
+       if (!is_resource($link)) return false;
 
        // Remove \t, \n and \r from queries they may confuse some MySQL version I have heard
        $sql_string = str_replace("\t", " ", str_replace("\n", " ", str_replace("\r", " ", $sql_string)));
@@ -47,10 +50,13 @@ function SQL_QUERY($sql_string, $F, $L) {
        // Starting time
        $querytimeBefore = array_sum(explode(' ', microtime()));
 
+       // Replace {!_MYSQL_PREFIX!} with constant, closes #84. Thanks to profi-concept
+       $sql_string = str_replace("{!_MYSQL_PREFIX!}", constant('_MYSQL_PREFIX'), $sql_string);
+
        // Run SQL command
        //* DEBUG: */ echo $sql_string."<br />\n";
-       $result = @mysql_query($sql_string, $link)
-        or ADD_FATAL($F." (".$L."):".mysql_error()."<br />
+       $result = mysql_query($sql_string, $link)
+        or addFatalMessage($F." (".$L."):".mysql_error()."<br />
 Query string:<br />
 ".$sql_string);
 
@@ -61,14 +67,13 @@ Query string:<br />
        $queryTime = $querytimeAfter - $querytimeBefore;
 
        // Save last successfull query
-       $_CONFIG['db_last_query'] = $sql_string;
+       setConfigEntry('db_last_query', $sql_string);
 
        // Count this query
-       if (!isset($_CONFIG['sql_count'])) $_CONFIG['sql_count'] = 0;
-       $_CONFIG['sql_count']++;
+       incrementConfigEntry('sql_count');
 
        // Debug output
-       //* DEBUG: */ print "Query=<pre>".$sql_string."</pre>, affected=<b>".SQL_AFFECTEDROWS()."</b>, numrows=<b>".SQL_NUMROWS($result)."</b><br />\n";
+       //* DEBUG: */ print "Query=<pre>".$sql_string."</pre>, affected=<strong>".SQL_AFFECTEDROWS()."</strong>, numrows=<strong>".SQL_NUMROWS($result)."</strong><br />\n";
 
        if (($CSS != "1") && ($CSS != "-1") && (isBooleanConstantAndTrue('DEBUG_MODE')) && (isBooleanConstantAndTrue('DEBUG_SQL'))) {
                //
@@ -85,12 +90,12 @@ Query string:<br />
        } // END - if
 
        // Count DB hits
-       if (!isset($_CONFIG['db_hits_run'])) {
+       if (!isConfigEntrySet('db_hits_run')) {
                // Count in dummy variable
-               $_CONFIG['db_hits_run'] = 1;
+               setConfigEntry('db_hits_run', 1);
        } else {
                // Count to config array
-               $_CONFIG['db_hits_run']++;
+               incrementConfigEntry('db_hits_run');
        }
 
        // Return the result
@@ -98,11 +103,11 @@ Query string:<br />
 }
 
 // SQL num rows
-function SQL_NUMROWS($result) {
+function SQL_NUMROWS ($result) {
        // Is the result a valid resource?
        if (is_resource($result)) {
                // Get the count of rows from database
-               $lines = @mysql_num_rows($result);
+               $lines = mysql_num_rows($result);
 
                // Is the result empty? Then we have an error!
                if (empty($lines)) $lines = 0;
@@ -121,7 +126,7 @@ function SQL_AFFECTEDROWS() {
        if (!is_resource($link)) return false;
 
        // Get affected rows
-       $lines = @mysql_affected_rows($link);
+       $lines = mysql_affected_rows($link);
 
        // Return it
        return $lines;
@@ -135,7 +140,7 @@ function SQL_FETCHROW($result) {
        // Is a result resource set?
        if (!is_resource($result)) return false;
 
-       $DATA = @mysql_fetch_row($result);
+       $DATA = mysql_fetch_row($result);
        return $DATA;
 }
 
@@ -148,7 +153,7 @@ function SQL_FETCHARRAY($res, $nr=0, $remove_numerical=true) {
        $row = array();
 
        // Load row from database
-       $row = @mysql_fetch_array($res);
+       $row = mysql_fetch_array($res);
 
        // Return only arrays here
        if (is_array($row)) {
@@ -171,67 +176,74 @@ function SQL_FETCHARRAY($res, $nr=0, $remove_numerical=true) {
 }
 
 // SQL result
-function SQL_RESULT($res, $row, $field) {
-       $result = @mysql_result($res, $row, $field);
+function SQL_RESULT ($res, $row, $field) {
+       $result = mysql_result($res, $row, $field);
        return $result;
 }
 // SQL connect
-function SQL_CONNECT($host, $login, $password, $F, $L) {
-       $connect = @mysql_connect($host, $login, $password) or ADD_FATAL($F." (".$L."):".mysql_error());
+function SQL_CONNECT ($host, $login, $password, $F, $L) {
+       $connect = mysql_connect($host, $login, $password) or addFatalMessage($F." (".$L."):".mysql_error());
        return $connect;
 }
 // SQL select database
-function SQL_SELECT_DB($dbName, $link, $F, $L) {
-       $select = false;
-       if (is_resource($link)) {
-               $select = @mysql_select_db($dbName, $link) or ADD_FATAL($F." (".$L."):".mysql_error());
-       }
-       return $select;
+function SQL_SELECT_DB ($dbName, $link, $F, $L) {
+       // Is there still a valid link? If not, skip it.
+       if (!is_resource($link)) return false;
+
+       return mysql_select_db($dbName, $link) or addFatalMessage($F." (".$L."):".mysql_error());
 }
 // SQL close link
-function SQL_CLOSE(&$link, $F, $L) {
-       global $_CONFIG, $cacheInstance, $cacheArray;
+function SQL_CLOSE (&$link, $F, $L) {
+       global $cacheInstance, $cacheArray;
 
-       // Is there still a valid link?
        if (!is_resource($link)) {
                // Skip double close
                return false;
        } // END - if
-       //* DEBUG: */ echo "DB=".$_CONFIG['db_hits'].",CACHE=".$_CONFIG['cache_hits']."<br />\n";
-       if ((GET_EXT_VERSION("cache") >= "0.0.7") && (isset($_CONFIG['db_hits'])) && (isset($_CONFIG['cache_hits'])) && (is_object($cacheInstance))) {
+
+       // Do we need to update cache/db counter?
+       //* DEBUG: */ echo "DB=".getConfig('db_hits').",CACHE=".getConfig('cache_hits')."<br />\n";
+       if ((GET_EXT_VERSION("cache") >= "0.0.7") && (getConfig('db_hits') > 0) && (getConfig('cache_hits') > 0) && (is_object($cacheInstance))) {
                // Add new hits
-               $_CONFIG['db_hits'] += $_CONFIG['db_hits_run'];
+               incrementConfigEntry('db_hits', getConfig('db_hits_run'));
 
                // Update counter for db/cache
-               UPDATE_CONFIG(array("db_hits", "cache_hits"), array(bigintval($_CONFIG['db_hits']), bigintval($_CONFIG['cache_hits'])));
+               UPDATE_CONFIG(array("db_hits", "cache_hits"), array(bigintval(getConfig('db_hits')), bigintval(getConfig('cache_hits'))));
        } // END - if
 
        // Close database link and forget the link
-       $close = @mysql_close($link) or ADD_FATAL($F." (".$L."):".mysql_error());
+       $close = mysql_close($link) or addFatalMessage($F." (".$L."):".mysql_error());
        $link = null;
        return $close;
 }
+
 // SQL free result
-function SQL_FREERESULT($result) {
+function SQL_FREERESULT ($result) {
        if (!is_resource($result)) {
                // Abort here
                return false;
        } // END - if
 
-       $res = @mysql_free_result($result);
+       $res = mysql_free_result($result);
        return $res;
 }
+
 // SQL string escaping
-function SQL_QUERY_ESC($qstring, $data, $file, $line, $run=true, $strip=true) {
+function SQL_QUERY_ESC ($qstring, $data, $file, $line, $run=true, $strip=true) {
        global $link;
 
+       // Link is there?
+       if (!is_resource($link)) return false;
+
+       // Init variable
+       $query = "failed";
+
        if ($strip) {
                $strip = "true";
        } else {
                $strip = "false";
        }
 
-       $query = "";
        $eval = "\$query = sprintf(\"".$qstring."\"";
        foreach ($data as $var) {
                if ((!empty($var)) || ($var === 0)) {
@@ -249,14 +261,18 @@ function SQL_QUERY_ESC($qstring, $data, $file, $line, $run=true, $strip=true) {
        //* DEBUG: */ fclose($fp);
 
        // Run the code
-       @eval($eval);
+       eval($eval);
 
        // Was the eval() command fine?
-       if (empty($query)) {
+       if ($query == "failed") {
                // Something went wrong?
-               print "eval=".htmlentities($eval)."<pre>";
-               debug_print_backtrace();
-               die("</pre>");
+               printf("eval=%s\n<pre>%s</pre>",
+                       htmlentities($eval),
+                       debug_get_printable_backtrace()
+               );
+
+               // Abort further code executions
+               exit;
        } // END - if
 
        if ($run) {
@@ -267,12 +283,16 @@ function SQL_QUERY_ESC($qstring, $data, $file, $line, $run=true, $strip=true) {
                return $query;
        }
 }
+
 // Get ID from last INSERT command
-function SQL_INSERTID() {
-       return @mysql_insert_id();
+function SQL_INSERTID () {
+       global $link;
+       if (!is_resource($link)) return false;
+       return mysql_insert_id();
 }
+
 // Escape a string for the database
-function SQL_ESCAPE($str, $secureString=true,$strip=true) {
+function SQL_ESCAPE ($str, $secureString=true,$strip=true) {
        global $link;
 
        // Secure string first? (which is the default behaviour!)
@@ -298,18 +318,37 @@ function SQL_ESCAPE($str, $secureString=true,$strip=true) {
                return addslashes($str);
        }
 }
+
 // SELECT query string from table, columns and so on... ;-)
 function SQL_RESULT_FROM_ARRAY ($table, $columns, $idRow, $id, $F, $L) {
+       // Is columns an array?
+       if (!is_array($columns)) {
+               // No array
+               trigger_error(sprintf("columns is not array. %s!=array", gettype($columns)));
+       } // END  - if
+
        // Prepare the SQL statement
-       $SQL = "SELECT ".implode(", ", $columns)." FROM "._MYSQL_PREFIX."_".$table." WHERE ".$idRow."=%s LIMIT 1";
+       $SQL = "SELECT `".implode("`, `", $columns)."` FROM `{!_MYSQL_PREFIX!}_%s` WHERE ``='%s' LIMIT 1";
 
        // Return the result
-       return SQL_QUERY_ESC($SQL, array(bigintval($id)), $F, $L);
+       return SQL_QUERY_ESC($SQL,
+               array(
+                       bigintval($id),
+                       $table,
+                       $idRow
+               ), $F, $L);
 }
+
 // ALTER TABLE wrapper function
-function SQL_ALTER_TABLE($sql, $F, $L) {
-       // Shall we add?
-       if (eregi("ADD", $sql) > 0) {
+function SQL_ALTER_TABLE ($sql, $F, $L) {
+       // This is the default result...
+       $result = false;
+
+       // Determine index/fulltext/unique word
+       $noIndex = ((eregi("INDEX", $sql) == false) && (eregi("FULLTEXT", $sql) == false) && (eregi("UNIQUE", $sql) == false);
+
+       // Shall we add/drop?
+       if (((eregi("ADD", $sql) > 0) || (eregi("DROP", $sql) > 0)) && ($noIndex)) {
                // Extract table name
                $tableArray = explode(" ", $sql);
                $tableName = str_replace("`", "", $tableArray[2]);
@@ -321,15 +360,19 @@ function SQL_ALTER_TABLE($sql, $F, $L) {
                $result = SQL_QUERY_ESC("SHOW COLUMNS FROM %s LIKE '%s'",
                        array($tableName, $columnName), $F, $L);
 
-               // Do we have no entry?
-               if (SQL_NUMROWS($result) == 0) {
+               // Do we have no entry on ADD or an entry on DROP?
+               // 123           4       4     3    3     4           4    32    23           4       4     3    3     4            4    321
+               if (((SQL_NUMROWS($result) == 0) && (eregi("ADD", $sql) > 0)) || ((SQL_NUMROWS($result) == 1) && (eregi("DROP", $sql) > 0))) {
                        // Do the query
-                       return SQL_QUERY($sql, $F, $L, false);
+                       $result = SQL_QUERY($sql, $F, $L, false);
                } // END - if
        } else {
                // Send it to the SQL_QUERY() function
-               return SQL_QUERY($sql, $F, $L, false);
+               $result = SQL_QUERY($sql, $F, $L, false);
        }
+
+       // Return result
+       return $result;
 }
 //
 ?>