Fixed bug #11599: TYPO3 dies without an error message when the mysql-module for php...
[Packages/TYPO3.CMS.git] / t3lib / class.t3lib_db.php
old mode 100755 (executable)
new mode 100644 (file)
index 9f5deb4..e64e38d
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 2004-2008 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 2004-2009 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -25,7 +25,9 @@
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
 /**
- * Contains the class "t3lib_db" containing functions for building SQL queries and mysql wrappers, thus providing a foundational API to all database interaction.
+ * Contains the class "t3lib_db" containing functions for building SQL queries
+ * and mysql wrappers, thus providing a foundational API to all database
+ * interaction.
  * This class is instantiated globally as $TYPO3_DB in TYPO3 scripts.
  *
  * $Id$
@@ -268,7 +270,7 @@ class t3lib_DB {
                $mmWhere.= ($local_table AND $foreign_table) ? ' AND ' : '';
                $mmWhere.= $foreign_table ? ($foreign_table_as ? $foreign_table_as : $foreign_table).'.uid='.$mm_table.'.uid_foreign' : '';
 
-               return $GLOBALS['TYPO3_DB']->exec_SELECTquery(
+               return $this->exec_SELECTquery(
                                        $select,
                                        ($local_table ? $local_table.',' : '').$mm_table.($foreign_table ? ','. $foreign_table.($foreign_table_as ? ' AS '.$foreign_table_as : '') : ''),
                                        $mmWhere.' '.$whereClause,              // whereClauseMightContainGroupOrderBy
@@ -330,6 +332,24 @@ class t3lib_DB {
                return $output;
        }
 
+       /**
+        * Counts the number of rows in a table.
+        *
+        * @param       string          $field: Name of the field to use in the COUNT() expression (e.g. '*')
+        * @param       string          $table: Name of the table to count rows for
+        * @param       string          $where: (optional) WHERE statement of the query
+        * @return      mixed           Number of rows counter (integer) or false if something went wrong (boolean)
+        */
+       public function exec_SELECTcountRows($field, $table, $where = '') {
+               $count = false;
+               $resultSet = $this->exec_SELECTquery('COUNT(' . $field . ')', $table, $where);
+               if ($resultSet !== false) {
+                       list($count) = $this->sql_fetch_row($resultSet);
+                       $this->sql_free_result($resultSet);
+               }
+               return $count;
+       }
+
 
 
 
@@ -741,12 +761,13 @@ class t3lib_DB {
        /**
         * Executes query
         * mysql() wrapper function
-        * DEPRECATED - use exec_* functions from this class instead!
-        * Usage count/core: 9
+        * Usage count/core: 0
         *
         * @param       string          Database name
         * @param       string          Query to execute
         * @return      pointer         Result pointer / DBAL object
+        * @deprecated since TYPO3 3.6
+        * @see sql_query()
         */
        function sql($db,$query)        {
                $res = mysql_query($query, $this->link);
@@ -908,6 +929,12 @@ class t3lib_DB {
                @ini_set('track_errors', 1);
                @ini_set('html_errors', 0);
 
+                       // check if MySQL extension is loaded
+               if (!extension_loaded('mysql')) {
+                       t3lib_BEfunc::typo3PrintError('Database Error', 'You don\'t seem to have MySQL-support for PHP installed!');
+                       exit;
+               }
+
                        // Check for client compression
                $isLocalhost = ($TYPO3_db_host == 'localhost' || $TYPO3_db_host == '127.0.0.1');
                if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['no_pconnect'])  {
@@ -1011,6 +1038,8 @@ class t3lib_DB {
                        while ($theTable = mysql_fetch_assoc($tables_result)) {
                                $whichTables[$theTable['Name']] = $theTable;
                        }
+
+                       $this->sql_free_result($tables_result);
                }
 
                return $whichTables;
@@ -1032,6 +1061,8 @@ class t3lib_DB {
                        $output[$fieldRow['Field']] = $fieldRow;
                }
 
+               $this->sql_free_result($columns_res);
+
                return $output;
        }
 
@@ -1050,6 +1081,8 @@ class t3lib_DB {
                        $output[] = $keyRow;
                }
 
+               $this->sql_free_result($keyRes);
+
                return $output;
        }
 
@@ -1070,6 +1103,8 @@ class t3lib_DB {
                        while (($row = mysql_fetch_assoc($columns_res))) {
                                $output[$row['Charset']] = $row;
                        }
+
+                       $this->sql_free_result($columns_res);
                }
 
                return $output;
@@ -1220,7 +1255,7 @@ class t3lib_DB {
                        return false;
                }
 
-               $error = $GLOBALS['TYPO3_DB']->sql_error();
+               $error = $this->sql_error();
                $trail = t3lib_div::debug_trail();
 
                $explain_tables = array();