OSDN Git Service

MERGE: リビジョン1787。Adminクラスのいくつかのメソッドのコード整理。
[nucleus-jp/nucleus-next.git] / nucleus / libs / sql / pdo.php
index 10e5e0c..56c351c 100644 (file)
-<?php
-
-/*
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
- * Copyright (C) 2002-2009 The Nucleus Group
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * (see nucleus/documentation/index.html#license for more info)
- */
-/**
- * @license http://nucleuscms.org/license.txt GNU General Public License
- * @copyright Copyright (C) 2002-2009 The Nucleus Group
- * @version $Id$
- */
-/*
- * complete sql_* wrappers for mysql functions
- *
- * functions moved from globalfunctions.php: sql_connect, sql_disconnect, sql_query
- */
-
-$MYSQL_CONN = 0;
-global $SQL_DBH;
-$SQL_DBH = NULL;
-
-if (!function_exists('sql_fetch_assoc'))
-{
-       /**
-        * Errors before the database connection has been made
-        */
-       function startUpError($msg, $title) {
-               ?>
-               <html xmlns="http://www.w3.org/1999/xhtml">
-                       <head><title><?php echo i18n::hsc($title)?></title></head>
-                       <body>
-                               <h1><?php echo i18n::hsc($title)?></h1>
-                               <?php echo $msg?>
-                       </body>
-               </html>
-               <?php   exit;
-       }
-       
-       /**
-         * Connects to mysql server
-         */
-       function sql_connect_args($mysql_host = 'localhost', $mysql_user = '', $mysql_password = '', $mysql_database = '') {
-               global $MYSQL_HANDLER;
-               
-               try {
-                       if (i18n::strpos($mysql_host,':') === false) {
-                               $host = $mysql_host;
-                               $port = '';
-                               $portnum = '';
-                       }
-                       else {
-                               list($host,$port) = i18n::explode(":",$mysql_host);
-                               if (isset($port)) {
-                                       $portnum = $port;
-                                       $port = ';port='.trim($port);
-                               }
-                               else {
-                                       $port = '';
-                                       $portnum = '';
-                               }
-                       }
-                       
-                       switch ($MYSQL_HANDLER[1]) {
-                               case 'sybase':
-                               case 'dblib':
-                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
-                                       else $port = '';
-                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);
-                               break;
-                               case 'mssql':
-                                       if (is_numeric($portnum)) $port = ','.intval($portnum);
-                                       else $port = '';
-                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);
-                               break;
-                               case 'oci':
-                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
-                                       else $port = '';
-                                       $DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$mysql_database, $mysql_user, $mysql_password);
-                               break;
-                               case 'odbc':
-                                       if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);
-                                       else $port = '';
-                                       $DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$mysql_database.';PROTOCOL=TCPIP;UID='.$mysql_user.';PWD='.$mysql_password);
-
-                               break;
-                               case 'pgsql':
-                                       if (is_numeric($portnum)) $port = ';port='.intval($portnum);
-                                       else $port = '';
-                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);
-                               break;
-                               case 'sqlite':
-                               case 'sqlite2':
-                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
-                                       else $port = '';
-                                       $DBH = new PDO($MYSQL_HANDLER[1].':'.$mysql_database, $mysql_user, $mysql_password);
-                                       if ($DBH)
-                                       {
-                                               $DBH->sqliteCreateFunction('SUBSTRING', 'substr', 3);
-                                               $DBH->sqliteCreateFunction('UNIX_TIMESTAMP', 'strtotime', 1);
-                                       } 
-                               break;
-                               default:
-                                       //mysql
-                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);
-                               break;
-                       }
-       
-                       
-                                               
-               } catch (PDOException $e) {
-                       $DBH =NULL;
-                       startUpError('<p>a1 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');
-               }
-               
-               if ( $mysql_database )
-               {
-                       sql_set_charset('utf8');
-               }
-               
-               /*
-               // For debugging
-               echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';
-               $result = sql_query('SHOW VARIABLES LIKE \'char%\';');
-               while(FALSE !== ($row = sql_fetch_row($result)))
-               {
-                       echo "{$row[0]}: {$row[1]}\n";
-               }
-               */
-               
-               return $DBH;
-       }
-       
-       /**
-         * Connects to mysql server
-         */
-       function sql_connect() {
-               global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN, $MYSQL_HANDLER, $SQL_DBH;
-               $SQL_DBH = NULL;
-               try {
-                       if (i18n::strpos($MYSQL_HOST,':') === false) {
-                               $host = $MYSQL_HOST;
-                               $port = '';
-                               $portnum = ''; 
-                       }
-                       else {
-                               list($host,$port) = i18n::explode(":",$MYSQL_HOST);
-                               if (isset($port)) {
-                                       $portnum = $port;
-                                       $port = ';port='.trim($port);
-                               }
-                               else {
-                                       $port = '';
-                                       $portnum = '';
-                               }
-                       }
-                       
-                       switch ($MYSQL_HANDLER[1]) {
-                               case 'sybase':
-                               case 'dblib':
-                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
-                                       else $port = '';
-                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
-                               break;
-                               case 'mssql':
-                                       if (is_numeric($portnum)) $port = ','.intval($portnum);
-                                       else $port = '';
-                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
-                               break;
-                               case 'oci':
-                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
-                                       else $port = '';
-                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
-                               break;
-                               case 'odbc':
-                                       if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);
-                                       else $port = '';
-                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$MYSQL_DATABASE.';PROTOCOL=TCPIP;UID='.$MYSQL_USER.';PWD='.$MYSQL_PASSWORD);
-
-                               break;
-                               case 'pgsql':
-                                       if (is_numeric($portnum)) $port = ';port='.intval($portnum);
-                                       else $port = '';
-                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
-                               break;
-                               case 'sqlite':
-                               case 'sqlite2':
-                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
-                                       else $port = '';
-                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':'.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
-                                       if ($SQL_DBH)
-                                       {
-                                               $SQL_DBH->sqliteCreateFunction('SUBSTRING', 'substr', 3);
-                                               $SQL_DBH->sqliteCreateFunction('UNIX_TIMESTAMP', 'strtotime', 1);
-                                       } 
-                               break;
-                               default:
-                                       //mysql
-                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
-                               break;
-                       }
-                       
-                       //$SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
-                                               
-               } catch (PDOException $e) {
-                       $SQL_DBH = NULL;
-                       startUpError('<p>a2 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');
-               }
-               
-               if ( $MYSQL_DATABASE )
-               {
-                       sql_set_charset('utf8');
-               }
-               
-               /*
-               // For debugging
-               echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';
-               $result = sql_query('SHOW VARIABLES LIKE \'char%\';');
-               while(FALSE !== ($row = sql_fetch_row($result)))
-               {
-                       echo "{$row[0]}: {$row[1]}\n";
-               }
-               */
-               
-               $MYSQL_CONN =& $SQL_DBH;
-//             echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';             
-               $MYSQL_CONN =& $SQL_DBH;
-               return $SQL_DBH;
-
-       }
-
-       /**
-         * disconnects from SQL server
-         */
-       function sql_disconnect(&$dbh=NULL) {
-               global $SQL_DBH;
-               if (is_null($dbh)) $SQL_DBH = NULL;
-               else $dbh = NULL;
-       }
-       
-       function sql_close(&$dbh=NULL) {
-               global $SQL_DBH;
-               if (is_null($dbh)) $SQL_DBH = NULL;
-               else $dbh = NULL;
-       }
-       
-       /**
-         * executes an SQL query
-         */
-       function sql_query($query,$dbh=NULL) {
-               global $SQLCount,$SQL_DBH;
-               $SQLCount++;
-//echo '<hr />SQL_DBH: ';
-//print_r($SQL_DBH);
-//echo '<hr />DBH: ';
-//print_r($dbh);
-//echo '<hr />';
-//echo $query.'<hr />';
-               if (is_null($dbh)) $res = $SQL_DBH->query($query);
-               else $res = $dbh->query($query);
-               //if ($res->errorCode() != '00000') {
-               //      $errors = $res->errorInfo();
-               if (($res === false) || ($res->errorCode() != '00000') ) {
-                       $errors = ($res !== false) ? $res->errorInfo() : ( is_object($dbh) ? $dbh->errorInfo() : $SQL_DBH->errorInfo());
-                       print("SQL error with query $query: " . $errors[0].'-'.$errors[1].' '.$errors[2] . '<p />');
-               }
-               
-               return $res;
-       }
-       
-       /**
-         * executes an SQL error
-         */
-       function sql_error($dbh=NULL)
-       {
-               global $SQL_DBH;
-               if (is_null($dbh)) $error = $SQL_DBH->errorInfo();
-               else $error = $dbh->errorInfo();
-               if ($error[0] != '00000') {
-                       return $error[0].'-'.$error[1].' '.$error[2];
-               }
-               else return '';
-       }
-       
-       /**
-         * executes an SQL db select
-         */
-       function sql_select_db($db,&$dbh=NULL)
-       {
-               global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN, $MYSQL_HANDLER, $SQL_DBH;
-//echo '<hr />'.print_r($dbh,true).'<hr />';
-//exit;
-               if (is_null($dbh)) { 
-                       try {
-                               $SQL_DBH = NULL;
-                               list($host,$port) = i18n::explode(":",$MYSQL_HOST);
-                               if (isset($port)) {
-                                       $portnum = $port;
-                                       $port = ';port='.trim($port);
-                               }
-                               else {
-                                       $port = '';
-                                       $portnum = '';
-                               }
-                               //$SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.trim($host).$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
-                               //$SQL_DBH = sql_connect();
-                               switch ($MYSQL_HANDLER[1]) {
-                                       case 'sybase':
-                                       case 'dblib':
-                                               if (is_numeric($portnum)) $port = ':'.intval($portnum);
-                                               else $port = '';
-                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
-                                       break;
-                                       case 'mssql':
-                                               if (is_numeric($portnum)) $port = ','.intval($portnum);
-                                               else $port = '';
-                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
-                                       break;
-                                       case 'oci':
-                                               if (is_numeric($portnum)) $port = ':'.intval($portnum);
-                                               else $port = '';
-                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$db, $MYSQL_USER, $MYSQL_PASSWORD);
-                                       break;
-                                       case 'odbc':
-                                               if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);
-                                               else $port = '';
-                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$db.';PROTOCOL=TCPIP;UID='.$MYSQL_USER.';PWD='.$MYSQL_PASSWORD);
-
-                                       break;
-                                       case 'pgsql':
-                                               if (is_numeric($portnum)) $port = ';port='.intval($portnum);
-                                               else $port = '';
-                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
-                                       break;
-                                       case 'sqlite':
-                                       case 'sqlite2':
-                                               if (is_numeric($portnum)) $port = ':'.intval($portnum);
-                                               else $port = '';
-                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':'.$db, $MYSQL_USER, $MYSQL_PASSWORD);
-                                       break;
-                                       default:
-                                               //mysql
-                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
-                                       break;
-                               }
-                               return 1;
-                       } catch (PDOException $e) {
-                               startUpError('<p>a3 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');
-                               return 0;
-                       }
-               }
-               else {
-                       if ($dbh->exec("USE $db") !== false) return 1;
-                       else return 0;
-               }
-       }
-       
-       /**
-         * executes an SQL real escape 
-         */
-       function sql_real_escape_string($val,$dbh=NULL)
-       {
-               global $MYSQL_HANDLER;
-               if (stripos($MYSQL_HANDLER[1] , 'sqlite') !== false)
-               {
-                       return sqlite_escape_string($val); 
-               }
-               else 
-               {
-                       return addslashes($val);
-               }
-       }
-       
-       /**
-         * executes an PDO::quote() like escape, ie adds quotes arround the string and escapes chars as needed 
-         */
-       function sql_quote_string($val,$dbh=NULL) {
-               global $SQL_DBH;
-               if (is_null($dbh))
-                       return $SQL_DBH->quote($val);
-               else
-                       return $dbh->quote($val);
-       }
-       
-       /**
-         * executes an SQL insert id
-         */
-       function sql_insert_id($dbh=NULL)
-       {       
-               global $SQL_DBH;
-               if (is_null($dbh))
-                       return $SQL_DBH->lastInsertId();
-               else
-                       return $dbh->lastInsertId();
-       }
-       
-       /**
-         * executes an SQL result request
-         */
-       function sql_result($res, $row = 0, $col = 0)
-       {
-               $results = array();
-               if (intval($row) < 1) {
-                       $results = $res->fetch(PDO::FETCH_BOTH);
-                       return $results[$col];
-               }
-               else {
-                       for ($i = 0; $i < intval($row); $i++) {
-                               $results = $res->fetch(PDO::FETCH_BOTH);
-                       }
-                       $results = $res->fetch(PDO::FETCH_BOTH);
-                       return $results[$col];
-               }
-       }
-       
-       /**
-         * frees sql result resources
-         */
-       function sql_free_result($res)
-       {
-               $res = NULL;
-               return true;
-       }
-       
-       /**
-         * returns number of rows in SQL result
-         */
-       function sql_num_rows($res)
-       {
-               return $res->rowCount();
-       }
-       
-       /**
-         * returns number of rows affected by SQL query
-         */
-       function sql_affected_rows($res)
-       {
-               return $res->rowCount();
-       }
-       
-       /**
-         * Get number of fields in result
-         */
-       function sql_num_fields($res)
-       {
-               return $res->columnCount();
-       }
-       
-       /**
-         * fetches next row of SQL result as an associative array
-         */
-       function sql_fetch_assoc($res)
-       {
-               $results = array();
-               $results = $res->fetch(PDO::FETCH_ASSOC);       
-               return $results;
-       }
-       
-       /**
-         * Fetch a result row as an associative array, a numeric array, or both
-         */
-       function sql_fetch_array($res)
-       {
-               $results = array();
-               $results = $res->fetch(PDO::FETCH_BOTH);
-               return $results;
-       }
-       
-       /**
-         * fetches next row of SQL result as an object
-         */
-       function sql_fetch_object($res)
-       {
-               $results = NULL;
-               $results = $res->fetchObject(); 
-               return $results;
-       }
-       
-       /**
-         * Get a result row as an enumerated array
-         */
-       function sql_fetch_row($res)
-       {
-               $results = array();
-               $results = $res->fetch(PDO::FETCH_NUM); 
-               return $results;
-       }
-       
-       /**
-         * Get column information from a result and return as an object
-         */
-       function sql_fetch_field($res,$offset = 0)
-       {
-               $results = array();
-               $obj = NULL;
-               $results = $res->getColumnMeta($offset);
-               foreach($results as $key=>$value) {
-                       $obj->$key = $value;
-               }
-               return $obj;
-       }
-       
-       /**
-         * Get current system status (returns string)
-         */
-       function sql_stat($dbh=NULL)
-       {
-               //not implemented
-               global $SQL_DBH;
-               if (is_null($dbh))
-                       return '';
-               else
-                       return '';
-       }
-       
-       /**
-         * Returns the name of the character set
-         */
-       function sql_client_encoding($dbh=NULL)
-       {
-               //not implemented
-               global $SQL_DBH;
-               if (is_null($dbh))
-                       return '';
-               else
-                       return '';
-       }
-       
-       /**
-         * Get SQL client version
-         */
-       function sql_get_client_info()
-       {
-               global $SQL_DBH;
-               return $SQL_DBH->getAttribute(constant("PDO::ATTR_CLIENT_VERSION"));
-       }
-       
-       /**
-         * Get SQL server version
-         */
-       function sql_get_server_info($dbh=NULL)
-       {
-               global $SQL_DBH;
-               if (is_null($dbh))
-                       return $SQL_DBH->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));
-               else
-                       return $dbh->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));
-       }
-       
-       /**
-         * Returns a string describing the type of SQL connection in use for the connection or FALSE on failure
-         */
-       function sql_get_host_info($dbh=NULL)
-       {
-               global $SQL_DBH;
-               if (is_null($dbh))
-                       return $SQL_DBH->getAttribute(constant("PDO::ATTR_SERVER_INFO"));
-               else
-                       return $dbh->getAttribute(constant("PDO::ATTR_SERVER_INFO"));
-       }
-       
-       /**
-         * Returns the SQL protocol on success, or FALSE on failure. 
-         */
-       function sql_get_proto_info($dbh=NULL)
-       {
-               //not implemented
-               global $SQL_DBH;
-               if (is_null($dbh))
-                       return false;
-               else
-                       return false;
-       }
-
-       /**
-        * Get the name of the specified field in a result
-        */
-       function sql_field_name($res, $offset = 0)
-       {
-               $column = $res->getColumnMeta($offset);
-               if ($column) {
-                       return $column['name'];
-               }
-               return false;
-       }
-       
-       /**
-        * Set character encodings in each fields
-        */
-       function sql_set_charset($charset)
-       {
-               global $MYSQL_HANDLER, $SQL_DBH;
-               
-               $result = TRUE;
-               
-               if ( $MYSQL_HANDLER[0] == '' || in_array('mysql', $MYSQL_HANDLER) )
-               {
-                       /*
-                        * NOTE:
-                        * It's great help to you refering the same function in mysql.php.
-                        * PDO::MySQL has no function as same as mysql_set_charset().
-                        */
-                       $charset = strtolower($charset);
-                       $mysql_version = preg_replace('#^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{1,2})(.*)$#', '$1.$2.$3', sql_get_server_info($SQL_DBH));
-                       
-                       if ( version_compare($mysql_version, '5.0.7', '<') )
-                       {
-                               $result = sql_query("SET CHARACTER SET {$charset};");
-                       }
-                       else
-                       {
-                               $result = sql_query("SET NAMES {$charset};");
-                       }
-               }
-               return $result;
-       }
-       
-/**************************************************************************
-Unimplemented mysql_* functions
-
-# mysql_ data_ seek (maybe useful)
-# mysql_ errno (maybe useful)
-# mysql_ fetch_ lengths (maybe useful)
-# mysql_ field_ flags (maybe useful)
-# mysql_ field_ len (maybe useful)
-# mysql_ field_ seek (maybe useful)
-# mysql_ field_ table (maybe useful)
-# mysql_ field_ type (maybe useful)
-# mysql_ info (maybe useful)
-# mysql_ list_ processes (maybe useful)
-# mysql_ ping (maybe useful)
-# mysql_ set_ charset (maybe useful, requires php >=5.2.3 and mysql >=5.0.7)
-# mysql_ thread_ id (maybe useful)
-
-# mysql_ db_ name (useful only if working on multiple dbs which we do not do)
-# mysql_ list_ dbs (useful only if working on multiple dbs which we do not do)
-
-# mysql_ pconnect (probably not useful and could cause some unintended performance issues)
-# mysql_ unbuffered_ query (possibly useful, but complicated and not supported by all database drivers (pdo))
-
-# mysql_ change_ user (deprecated)
-# mysql_ create_ db (deprecated)
-# mysql_ db_ query (deprecated)
-# mysql_ drop_ db (deprecated)
-# mysql_ escape_ string (deprecated)
-# mysql_ list_ fields (deprecated)
-# mysql_ list_ tables (deprecated)
-# mysql_ tablename (deprecated)
-
-*******************************************************************/
-
-}
+<?php\r
+\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2012 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+/**\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2012 The Nucleus Group\r
+ * @version $Id$\r
+ */\r
\r
+/*\r
+ * complete sql_* wrappers for mysql functions\r
+ *\r
+ * functions moved from globalfunctions.php: sql_connect, sql_disconnect, sql_query\r
+ */\r
\r
+\r
+$MYSQL_CONN = 0;\r
+global $SQL_DBH;\r
+$SQL_DBH = NULL;\r
+\r
+if (!function_exists('sql_fetch_assoc'))\r
+{\r
+       /**\r
+        * Errors before the database connection has been made\r
+        */\r
+       function startUpError($msg, $title) {\r
+               ?>\r
+               <html xmlns="http://www.w3.org/1999/xhtml">\r
+                       <head><title><?php echo Entity::hsc($title)?></title></head>\r
+                       <body>\r
+                               <h1><?php echo Entity::hsc($title)?></h1>\r
+                               <?php echo $msg?>\r
+                       </body>\r
+               </html>\r
+               <?php   exit;\r
+       }\r
+       \r
+       /**\r
+         * Connects to mysql server\r
+         */\r
+       function sql_connect_args($mysql_host = 'localhost', $mysql_user = '', $mysql_password = '', $mysql_database = '') {\r
+               global $MYSQL_HANDLER;\r
+               \r
+               try {\r
+                       if (i18n::strpos($mysql_host,':') === false) {\r
+                               $host = $mysql_host;\r
+                               $port = '';\r
+                               $portnum = '';\r
+                       }\r
+                       else {\r
+                               list($host,$port) = preg_split("#:#", $mysql_host);\r
+                               if (isset($port)) {\r
+                                       $portnum = $port;\r
+                                       $port = ';port='.trim($port);\r
+                               }\r
+                               else {\r
+                                       $port = '';\r
+                                       $portnum = '';\r
+                               }\r
+                       }\r
+                       \r
+                       switch ($MYSQL_HANDLER[1]) {\r
+                               case 'sybase':\r
+                               case 'dblib':\r
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
+                                       else $port = '';\r
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);\r
+                               break;\r
+                               case 'mssql':\r
+                                       if (is_numeric($portnum)) $port = ','.intval($portnum);\r
+                                       else $port = '';\r
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);\r
+                               break;\r
+                               case 'oci':\r
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
+                                       else $port = '';\r
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$mysql_database, $mysql_user, $mysql_password);\r
+                               break;\r
+                               case 'odbc':\r
+                                       if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);\r
+                                       else $port = '';\r
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$mysql_database.';PROTOCOL=TCPIP;UID='.$mysql_user.';PWD='.$mysql_password);\r
+\r
+                               break;\r
+                               case 'pgsql':\r
+                                       if (is_numeric($portnum)) $port = ';port='.intval($portnum);\r
+                                       else $port = '';\r
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);\r
+                               break;\r
+                               case 'sqlite':\r
+                               case 'sqlite2':\r
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
+                                       else $port = '';\r
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':'.$mysql_database, $mysql_user, $mysql_password);\r
+                                       if ($DBH)\r
+                                       {\r
+                                               $DBH->sqliteCreateFunction('SUBSTRING', 'substr', 3);\r
+                                               $DBH->sqliteCreateFunction('UNIX_TIMESTAMP', 'strtotime', 1);\r
+                                       } \r
+                               break;\r
+                               default:\r
+                                       //mysql\r
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);\r
+                               break;\r
+                       }\r
+       \r
+                       \r
+                                               \r
+               } catch (PDOException $e) {\r
+                       $DBH =NULL;\r
+                       startUpError('<p>a1 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');\r
+               }\r
+               \r
+               if ( $mysql_database )\r
+               {\r
+                       sql_set_charset('utf8');\r
+               }\r
+               \r
+               /*\r
+               // For debugging\r
+               echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';\r
+               $result = sql_query('SHOW VARIABLES LIKE \'char%\';');\r
+               while(FALSE !== ($row = sql_fetch_row($result)))\r
+               {\r
+                       echo "{$row[0]}: {$row[1]}\n";\r
+               }\r
+               */\r
+               \r
+               return $DBH;\r
+       }\r
+       \r
+       /**\r
+         * Connects to mysql server\r
+         */\r
+       function sql_connect() {\r
+               global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN, $MYSQL_HANDLER, $SQL_DBH;\r
+               $SQL_DBH = NULL;\r
+               try {\r
+                       if (i18n::strpos($MYSQL_HOST,':') === false) {\r
+                               $host = $MYSQL_HOST;\r
+                               $port = '';\r
+                               $portnum = ''; \r
+                       }\r
+                       else {\r
+                               list($host,$port) = preg_split("#:#", $MYSQL_HOST);\r
+                               if (isset($port)) {\r
+                                       $portnum = $port;\r
+                                       $port = ';port='.trim($port);\r
+                               }\r
+                               else {\r
+                                       $port = '';\r
+                                       $portnum = '';\r
+                               }\r
+                       }\r
+                       \r
+                       switch ($MYSQL_HANDLER[1]) {\r
+                               case 'sybase':\r
+                               case 'dblib':\r
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
+                                       else $port = '';\r
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                               break;\r
+                               case 'mssql':\r
+                                       if (is_numeric($portnum)) $port = ','.intval($portnum);\r
+                                       else $port = '';\r
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                               break;\r
+                               case 'oci':\r
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
+                                       else $port = '';\r
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                               break;\r
+                               case 'odbc':\r
+                                       if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);\r
+                                       else $port = '';\r
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$MYSQL_DATABASE.';PROTOCOL=TCPIP;UID='.$MYSQL_USER.';PWD='.$MYSQL_PASSWORD);\r
+\r
+                               break;\r
+                               case 'pgsql':\r
+                                       if (is_numeric($portnum)) $port = ';port='.intval($portnum);\r
+                                       else $port = '';\r
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                               break;\r
+                               case 'sqlite':\r
+                               case 'sqlite2':\r
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
+                                       else $port = '';\r
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':'.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                                       if ($SQL_DBH)\r
+                                       {\r
+                                               $SQL_DBH->sqliteCreateFunction('SUBSTRING', 'substr', 3);\r
+                                               $SQL_DBH->sqliteCreateFunction('UNIX_TIMESTAMP', 'strtotime', 1);\r
+                                       } \r
+                               break;\r
+                               default:\r
+                                       //mysql\r
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                               break;\r
+                       }\r
+                       \r
+                       //$SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                                               \r
+               } catch (PDOException $e) {\r
+                       $SQL_DBH = NULL;\r
+                       startUpError('<p>a2 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');\r
+               }\r
+               \r
+               if ( $MYSQL_DATABASE )\r
+               {\r
+                       sql_set_charset('utf8');\r
+               }\r
+               \r
+               /*\r
+               // For debugging\r
+               echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';\r
+               $result = sql_query('SHOW VARIABLES LIKE \'char%\';');\r
+               while(FALSE !== ($row = sql_fetch_row($result)))\r
+               {\r
+                       echo "{$row[0]}: {$row[1]}\n";\r
+               }\r
+               */\r
+               \r
+               $MYSQL_CONN =& $SQL_DBH;\r
+//             echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';             \r
+               $MYSQL_CONN =& $SQL_DBH;\r
+               return $SQL_DBH;\r
+\r
+       }\r
+\r
+       /**\r
+         * disconnects from SQL server\r
+         */\r
+       function sql_disconnect(&$dbh=NULL) {\r
+               global $SQL_DBH;\r
+               if (is_null($dbh)) $SQL_DBH = NULL;\r
+               else $dbh = NULL;\r
+       }\r
+       \r
+       /**\r
+        * sql_close()\r
+        * use sql_disconnect() instead of this\r
+        * \r
+        * @deprecated\r
+        * @param       resource        $conn   resource of mySQL connection\r
+        * @return      void\r
+        */\r
+       function sql_close(&$dbh=NULL)\r
+       {\r
+               global $SQL_DBH;\r
+               if ( is_null($dbh) )\r
+               {\r
+                       $SQL_DBH = NULL;\r
+               }\r
+               else\r
+               {\r
+                       $dbh = NULL;\r
+               }\r
+               return;\r
+       }\r
+       \r
+       /**\r
+         * executes an SQL query\r
+         */\r
+       function sql_query($query,$dbh=NULL) {\r
+               global $SQLCount,$SQL_DBH;\r
+               $SQLCount++;\r
+//echo '<hr />SQL_DBH: ';\r
+//print_r($SQL_DBH);\r
+//echo '<hr />DBH: ';\r
+//print_r($dbh);\r
+//echo '<hr />';\r
+//echo $query.'<hr />';\r
+               if (is_null($dbh)) $res = $SQL_DBH->query($query);\r
+               else $res = $dbh->query($query);\r
+               //if ($res->errorCode() != '00000') {\r
+               //      $errors = $res->errorInfo();\r
+               if (($res === false) || ($res->errorCode() != '00000') ) {\r
+                       $errors = ($res !== false) ? $res->errorInfo() : ( is_object($dbh) ? $dbh->errorInfo() : $SQL_DBH->errorInfo());\r
+                       print("SQL error with query $query: " . $errors[0].'-'.$errors[1].' '.$errors[2] . '<p />');\r
+               }\r
+               \r
+               return $res;\r
+       }\r
+       \r
+       /**\r
+         * executes an SQL error\r
+         */\r
+       function sql_error($dbh=NULL)\r
+       {\r
+               global $SQL_DBH;\r
+               if (is_null($dbh)) $error = $SQL_DBH->errorInfo();\r
+               else $error = $dbh->errorInfo();\r
+               if ($error[0] != '00000') {\r
+                       return $error[0].'-'.$error[1].' '.$error[2];\r
+               }\r
+               else return '';\r
+       }\r
+       \r
+       /**\r
+         * executes an SQL db select\r
+         */\r
+       function sql_select_db($db,&$dbh=NULL)\r
+       {\r
+               global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN, $MYSQL_HANDLER, $SQL_DBH;\r
+//echo '<hr />'.print_r($dbh,true).'<hr />';\r
+//exit;\r
+               if (is_null($dbh)) { \r
+                       try {\r
+                               $SQL_DBH = NULL;\r
+                               list($host,$port) = preg_split("#:#", $MYSQL_HOST);\r
+                               if (isset($port)) {\r
+                                       $portnum = $port;\r
+                                       $port = ';port='.trim($port);\r
+                               }\r
+                               else {\r
+                                       $port = '';\r
+                                       $portnum = '';\r
+                               }\r
+                               //$SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.trim($host).$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                               //$SQL_DBH = sql_connect();\r
+                               switch ($MYSQL_HANDLER[1]) {\r
+                                       case 'sybase':\r
+                                       case 'dblib':\r
+                                               if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
+                                               else $port = '';\r
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                                       break;\r
+                                       case 'mssql':\r
+                                               if (is_numeric($portnum)) $port = ','.intval($portnum);\r
+                                               else $port = '';\r
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                                       break;\r
+                                       case 'oci':\r
+                                               if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
+                                               else $port = '';\r
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                                       break;\r
+                                       case 'odbc':\r
+                                               if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);\r
+                                               else $port = '';\r
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$db.';PROTOCOL=TCPIP;UID='.$MYSQL_USER.';PWD='.$MYSQL_PASSWORD);\r
+\r
+                                       break;\r
+                                       case 'pgsql':\r
+                                               if (is_numeric($portnum)) $port = ';port='.intval($portnum);\r
+                                               else $port = '';\r
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                                       break;\r
+                                       case 'sqlite':\r
+                                       case 'sqlite2':\r
+                                               if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
+                                               else $port = '';\r
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':'.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                                       break;\r
+                                       default:\r
+                                               //mysql\r
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
+                                       break;\r
+                               }\r
+                               return 1;\r
+                       } catch (PDOException $e) {\r
+                               startUpError('<p>a3 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');\r
+                               return 0;\r
+                       }\r
+               }\r
+               else {\r
+                       if ($dbh->exec("USE $db") !== false) return 1;\r
+                       else return 0;\r
+               }\r
+       }\r
+       \r
+       /**\r
+         * executes an SQL real escape \r
+         */\r
+       function sql_real_escape_string($val,$dbh=NULL)\r
+       {\r
+               global $MYSQL_HANDLER;\r
+               if (stripos($MYSQL_HANDLER[1] , 'sqlite') !== false)\r
+               {\r
+                       return sqlite_escape_string($val); \r
+               }\r
+               else \r
+               {\r
+                       return addslashes($val);\r
+               }\r
+       }\r
+       \r
+       /**\r
+         * executes an PDO::quote() like escape, ie adds quotes arround the string and escapes chars as needed \r
+         */\r
+       function sql_quote_string($val,$dbh=NULL) {\r
+               global $SQL_DBH;\r
+               if (is_null($dbh))\r
+                       return $SQL_DBH->quote($val);\r
+               else\r
+                       return $dbh->quote($val);\r
+       }\r
+       \r
+       /**\r
+         * executes an SQL insert id\r
+         */\r
+       function sql_insert_id($dbh=NULL)\r
+       {       \r
+               global $SQL_DBH;\r
+               if (is_null($dbh))\r
+                       return $SQL_DBH->lastInsertId();\r
+               else\r
+                       return $dbh->lastInsertId();\r
+       }\r
+       \r
+       /**\r
+         * executes an SQL result request\r
+         */\r
+       function sql_result($res, $row = 0, $col = 0)\r
+       {\r
+               $results = array();\r
+               if (intval($row) < 1) {\r
+                       $results = $res->fetch(PDO::FETCH_BOTH);\r
+                       return $results[$col];\r
+               }\r
+               else {\r
+                       for ($i = 0; $i < intval($row); $i++) {\r
+                               $results = $res->fetch(PDO::FETCH_BOTH);\r
+                       }\r
+                       $results = $res->fetch(PDO::FETCH_BOTH);\r
+                       return $results[$col];\r
+               }\r
+       }\r
+       \r
+       /**\r
+         * frees sql result resources\r
+         */\r
+       function sql_free_result($res)\r
+       {\r
+               $res = NULL;\r
+               return true;\r
+       }\r
+       \r
+       /**\r
+         * returns number of rows in SQL result\r
+         */\r
+       function sql_num_rows($res)\r
+       {\r
+               return $res->rowCount();\r
+       }\r
+       \r
+       /**\r
+         * returns number of rows affected by SQL query\r
+         */\r
+       function sql_affected_rows($res)\r
+       {\r
+               return $res->rowCount();\r
+       }\r
+       \r
+       /**\r
+         * Get number of fields in result\r
+         */\r
+       function sql_num_fields($res)\r
+       {\r
+               return $res->columnCount();\r
+       }\r
+       \r
+       /**\r
+         * fetches next row of SQL result as an associative array\r
+         */\r
+       function sql_fetch_assoc($res)\r
+       {\r
+               $results = array();\r
+               $results = $res->fetch(PDO::FETCH_ASSOC);       \r
+               return $results;\r
+       }\r
+       \r
+       /**\r
+         * Fetch a result row as an associative array, a numeric array, or both\r
+         */\r
+       function sql_fetch_array($res)\r
+       {\r
+               $results = array();\r
+               $results = $res->fetch(PDO::FETCH_BOTH);\r
+               return $results;\r
+       }\r
+       \r
+       /**\r
+         * fetches next row of SQL result as an object\r
+         */\r
+       function sql_fetch_object($res)\r
+       {\r
+               $results = NULL;\r
+               $results = $res->fetchObject(); \r
+               return $results;\r
+       }\r
+       \r
+       /**\r
+         * Get a result row as an enumerated array\r
+         */\r
+       function sql_fetch_row($res)\r
+       {\r
+               $results = array();\r
+               $results = $res->fetch(PDO::FETCH_NUM); \r
+               return $results;\r
+       }\r
+       \r
+       /**\r
+         * Get column information from a result and return as an object\r
+         */\r
+       function sql_fetch_field($res,$offset = 0)\r
+       {\r
+               $results = array();\r
+               $obj = NULL;\r
+               $results = $res->getColumnMeta($offset);\r
+               foreach($results as $key=>$value) {\r
+                       $obj->$key = $value;\r
+               }\r
+               return $obj;\r
+       }\r
+       \r
+       /**\r
+         * Get current system status (returns string)\r
+         */\r
+       function sql_stat($dbh=NULL)\r
+       {\r
+               //not implemented\r
+               global $SQL_DBH;\r
+               if (is_null($dbh))\r
+                       return '';\r
+               else\r
+                       return '';\r
+       }\r
+       \r
+       /**\r
+         * Returns the name of the character set\r
+         */\r
+       function sql_client_encoding($dbh=NULL)\r
+       {\r
+               //not implemented\r
+               global $SQL_DBH;\r
+               if (is_null($dbh))\r
+                       return '';\r
+               else\r
+                       return '';\r
+       }\r
+       \r
+       /**\r
+         * Get SQL client version\r
+         */\r
+       function sql_get_client_info()\r
+       {\r
+               global $SQL_DBH;\r
+               return $SQL_DBH->getAttribute(constant("PDO::ATTR_CLIENT_VERSION"));\r
+       }\r
+       \r
+       /**\r
+         * Get SQL server version\r
+         */\r
+       function sql_get_server_info($dbh=NULL)\r
+       {\r
+               global $SQL_DBH;\r
+               if (is_null($dbh))\r
+                       return $SQL_DBH->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));\r
+               else\r
+                       return $dbh->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));\r
+       }\r
+       \r
+       /**\r
+         * Returns a string describing the type of SQL connection in use for the connection or FALSE on failure\r
+         */\r
+       function sql_get_host_info($dbh=NULL)\r
+       {\r
+               global $SQL_DBH;\r
+               if (is_null($dbh))\r
+                       return $SQL_DBH->getAttribute(constant("PDO::ATTR_SERVER_INFO"));\r
+               else\r
+                       return $dbh->getAttribute(constant("PDO::ATTR_SERVER_INFO"));\r
+       }\r
+       \r
+       /**\r
+         * Returns the SQL protocol on success, or FALSE on failure. \r
+         */\r
+       function sql_get_proto_info($dbh=NULL)\r
+       {\r
+               //not implemented\r
+               global $SQL_DBH;\r
+               if (is_null($dbh))\r
+                       return false;\r
+               else\r
+                       return false;\r
+       }\r
+\r
+       /**\r
+        * Get the name of the specified field in a result\r
+        */\r
+       function sql_field_name($res, $offset = 0)\r
+       {\r
+               $column = $res->getColumnMeta($offset);\r
+               if ($column) {\r
+                       return $column['name'];\r
+               }\r
+               return false;\r
+       }\r
+       \r
+       /**\r
+        * Set character encodings in each fields\r
+        */\r
+       function sql_set_charset($charset)\r
+       {\r
+               global $MYSQL_HANDLER, $SQL_DBH;\r
+               \r
+               $result = TRUE;\r
+               \r
+               if ( $MYSQL_HANDLER[0] == '' || in_array('mysql', $MYSQL_HANDLER) )\r
+               {\r
+                       /*\r
+                        * NOTE:\r
+                        * It's great help to you refering the same function in mysql.php.\r
+                        * PDO::MySQL has no function as same as mysql_set_charset().\r
+                        */\r
+                       $charset = strtolower($charset);\r
+                       $mysql_version = preg_replace('#^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{1,2})(.*)$#', '$1.$2.$3', sql_get_server_info($SQL_DBH));\r
+                       \r
+                       if ( version_compare($mysql_version, '5.0.7', '<') )\r
+                       {\r
+                               $result = sql_query("SET CHARACTER SET {$charset};");\r
+                       }\r
+                       else\r
+                       {\r
+                               $result = sql_query("SET NAMES {$charset};");\r
+                       }\r
+               }\r
+               return $result;\r
+       }\r
+       \r
+/**************************************************************************\r
+Unimplemented mysql_* functions\r
+\r
+# mysql_ data_ seek (maybe useful)\r
+# mysql_ errno (maybe useful)\r
+# mysql_ fetch_ lengths (maybe useful)\r
+# mysql_ field_ flags (maybe useful)\r
+# mysql_ field_ len (maybe useful)\r
+# mysql_ field_ seek (maybe useful)\r
+# mysql_ field_ table (maybe useful)\r
+# mysql_ field_ type (maybe useful)\r
+# mysql_ info (maybe useful)\r
+# mysql_ list_ processes (maybe useful)\r
+# mysql_ ping (maybe useful)\r
+# mysql_ set_ charset (maybe useful, requires php >=5.2.3 and mysql >=5.0.7)\r
+# mysql_ thread_ id (maybe useful)\r
+\r
+# mysql_ db_ name (useful only if working on multiple dbs which we do not do)\r
+# mysql_ list_ dbs (useful only if working on multiple dbs which we do not do)\r
+\r
+# mysql_ pconnect (probably not useful and could cause some unintended performance issues)\r
+# mysql_ unbuffered_ query (possibly useful, but complicated and not supported by all database drivers (pdo))\r
+\r
+# mysql_ change_ user (deprecated)\r
+# mysql_ create_ db (deprecated)\r
+# mysql_ db_ query (deprecated)\r
+# mysql_ drop_ db (deprecated)\r
+# mysql_ escape_ string (deprecated)\r
+# mysql_ list_ fields (deprecated)\r
+# mysql_ list_ tables (deprecated)\r
+# mysql_ tablename (deprecated)\r
+\r
+*******************************************************************/\r
+\r
+}\r