From: <se...@us...> - 2008-08-01 16:02:26
|
Revision: 14002 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=14002&view=rev Author: sept_7 Date: 2008-08-01 16:02:33 +0000 (Fri, 01 Aug 2008) Log Message: ----------- [EHN] : brings tiki into PDO world ! Modified Paths: -------------- branches/experimental/tiki-pdo/db/tiki-db.php branches/experimental/tiki-pdo/lib/tikidblib.php Modified: branches/experimental/tiki-pdo/db/tiki-db.php =================================================================== --- branches/experimental/tiki-pdo/db/tiki-db.php 2008-08-01 15:56:31 UTC (rev 14001) +++ branches/experimental/tiki-pdo/db/tiki-db.php 2008-08-01 16:02:33 UTC (rev 14002) @@ -110,22 +110,9 @@ if ( $dbversion_tiki == '1.10' ) $dbversion_tiki = '2.0'; -if (preg_match('/^adodb$/i', $api_tiki)) { - TikiInit::prependIncludePath('lib/adodb'); - if (strpos(ini_get('include_path'),'lib/pear') !== 0) - TikiInit::prependIncludePath('lib/pear'); - #error_reporting (E_ALL); # show any error messages triggered - define('ADODB_FORCE_NULLS', 1); - define('ADODB_ASSOC_CASE', 2); - define('ADODB_CASE_ASSOC', 2); // typo in adodb's driver for sybase? - require_once ('lib/adodb/adodb.inc.php'); - include_once ('lib/adodb/adodb-pear.inc.php'); - //include_once('adodb-error.inc.php'); - //include_once('adodb-errorhandler.inc.php'); - //include_once('adodb-errorpear.inc.php'); - if ($db_tiki == 'pgsql') { + //FIXME $db_tiki = 'postgres7'; } @@ -134,26 +121,17 @@ ini_set('sybct.min_server_severity', '11'); } - $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; +$dbTiki = new PDO("$db_tiki:host=$host_tiki;dbname=$dbs_tiki", $user_tiki, $pass_tiki); +$dbTiki->setAttribute(PDO::ATTR_CASE,PDO::CASE_NATURAL); +$dbTiki->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); +$dbTiki->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::NULL_EMPTY_STRING); +$dbTiki->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,false); -// ADODB_FETCH_BOTH appears to be buggy for null values -} else { - // Database connection for the tiki system - include_once ('lib/pear/DB.php'); -} +$pq = $dbTiki->prepare('select `login` from `users_users` limit 1'); +$result = $pq->execute(); +$pq->closeCursor(); -//doesn't work with adodb. adodb doesn't let you inherit -/* -class tikiDB extends ADOConnection { - var $dbversion; -} -*/ -$dsn = "$db_tiki://$user_tiki:$pass_tiki@$host_tiki/$dbs_tiki"; -//$dsn = "mysql://$user_tiki@$pass_tiki(localhost)/$dbs_tiki"; -$dbTiki = &ADONewConnection($db_tiki); - -if (!@$dbTiki->Connect($host_tiki, $user_tiki, $pass_tiki, $dbs_tiki) - or (!@$dbTiki->Execute('select `login` from `users_users` limit 1'))) { +if ( $result === FALSE ) { print '<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> @@ -170,7 +148,8 @@ <h1><font color="red">Tikiwiki is unable to connect to the database.</font> <a title="help" href="http://doc.tikiwiki.org/Installation" target="help"><img border="0" src="img/icons/help.gif" alt="Help" /></a></h1> '; print '<p>The following error message was returned:<div class="simplebox">'; - print $dbTiki->ErrorMsg(); + $errors = $dbTiki->errorInfo(); + print $errors[2]; print '</div></p><p>Things to check:<ul><li>Is your database up and running?</li><li>Are your database login credentials correct?</li><li>Did you complete the Tiki Installer?</li></ul> <p>Please see <a href="http://doc.tikiwiki.org/">the documentation</a> for more information.</p> </div> @@ -189,7 +168,7 @@ } if ($db_tiki == 'sybase') { - $dbTiki->Execute('set quoted_identifier on'); + $dbTiki->exec('set quoted_identifier on'); } // set db version @@ -211,6 +190,6 @@ function close_connection() { global $dbTiki; - $dbTiki->Close(); + $dbTiki= NULL; } ?> Modified: branches/experimental/tiki-pdo/lib/tikidblib.php =================================================================== --- branches/experimental/tiki-pdo/lib/tikidblib.php 2008-08-01 15:56:31 UTC (rev 14001) +++ branches/experimental/tiki-pdo/lib/tikidblib.php 2008-08-01 16:02:33 UTC (rev 14002) @@ -1,462 +1,476 @@ <?php -// -// $Id: /cvsroot/tikiwiki/tiki/lib/tikidblib.php,v 1.41.2.2 2007-12-01 19:52:53 nyloth Exp $ -// - // $access->check_script($_SERVER["SCRIPT_NAME"],basename(__FILE__)); $local_php = 'db/local.php'; if (is_file($local_php)) { - require_once($local_php); - + require_once($local_php); + if( $dbversion_tiki == '1.10' ) { $dbversion_tiki = '2.0'; } } -class TikiDB { -// Database access functions +class TikiPDOStatement extends PDOStatement { + var $pdo; + var $result; -var $db; // The ADODB db object used to access the database -var $_sql; // Internal variable to store the query string + function __construct ($pdostatement) { + $this->pdo = $pdostatement; + $this->result = $pdostatement->fetchAll(); + } -function TikiDB($db) -{ - if (!$db) { - die ("Invalid db object passed to TikiDB constructor"); - } + function fetchRow($mode) { + $tmp = current($this->result); + next($this->result); + return $tmp; + } - $this->db=$db; + function numRows() { + return sizeof($this->result); + } } -function startTimer() { - list($micro, $sec) = explode(' ', microtime()); - return $micro + $sec; -} +class TikiDB { + // Database access functions -function stopTimer($starttime) { - global $elapsed_in_db; - list($micro, $sec) = explode(' ', microtime()); - $now=$micro + $sec; - $elapsed_in_db+=$now - $starttime; -} + var $db; // The db object used to access the database + var $_sql; // Internal variable to store the query string + var $driver; // name of the driver used to access the DB + var $sql_error_msg = ""; // The last error message -// Use ADOdb->qstr() for 1.8 -function qstr($str) { - if (function_exists('mysql_real_escape_string')) { - return "'" . mysql_real_escape_string($str). "'"; - } else { - return "'" . mysql_escape_string($str). "'"; - } -} + function TikiDB($db) + { + if (!$db) { + die ("Invalid db object passed to TikiDB constructor"); + } -// Queries the database, *returning* an error if one occurs, rather -// than exiting while printing the error. -// -rlpowell -function queryError( $query, &$error, $values = null, $numrows = -1, - $offset = -1 ) -{ - $numrows = intval($numrows); - $offset = intval($offset); - $this->convert_query($query); - $this->convert_query_table_prefixes($query); - - $starttime=$this->startTimer(); - if ($numrows == -1 && $offset == -1) - $result = $this->db->Execute($query, $values); - else - $result = $this->db->SelectLimit($query, $numrows, $offset, $values); + $this->db=$db; + $this->db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY); + $this->driver = $db->getAttribute(PDO::ATTR_DRIVER_NAME); + } - $this->stopTimer($starttime); + function startTimer() { + list($micro, $sec) = explode(' ', microtime()); + return $micro + $sec; + } - if (!$result ) { - $error = $this->db->ErrorMsg(); - $result=false; - } + function stopTimer($starttime) { + global $elapsed_in_db; + list($micro, $sec) = explode(' ', microtime()); + $now=$micro + $sec; + $elapsed_in_db+=$now - $starttime; + } - //count the number of queries made - global $num_queries; - $num_queries++; - //$this->debugger_log($query, $values); - return $result; -} + function qstr($str) { + return PDO::quote($str); + } -// Queries the database reporting an error if detected -// -function query($query = null, $values = null, $numrows = -1, - $offset = -1, $reporterrors = true ) -{ - if ( $query == null ) { - $query = $this->_sql; + function _query( $query, $values = null, $numrows = -1, $offset = -1 ) + { + error_reporting(E_ALL); + global $num_queries; + $num_queries++; + + $numrows = intval($numrows); + $offset = intval($offset); + if ( $query == null ) { + $query = $this->_sql; + } + $this->convert_query_table_prefixes($query); + + $offsetStr = ($offset >= 0) ? "$offset," : ''; + if ($numrows < 0) $numrows = '18446744073709551615'; + $sql .= " LIMIT $offsetStr$numrows"; + + //echo "QUERY=$query<br/>"; + $starttime=$this->startTimer(); + + $pq = $this->db->prepare($query); + + if ($values and !is_array($values)) { + $values = array($values); + } + if ($values) { + $count = 1; + foreach($values as $value) { + //echo "bind var $count, value= $value<br/>"; + $pq->bindValue($count++,$value,is_int($value)?(PDO::PARAM_INT):(PDO::PARAM_STR)) ; + } + } + + $result = $pq->execute(); + + //echo "Error :<pre>".print_r($pq->errorInfo(),true)."</pre>"; + + $this->stopTimer($starttime); + + if (!$result ) { + $tmp = &$pq->errorInfo(); + $this->sql_error_msg = $tmp[2]; + $pq->closeCursor(); + return false; + } else { + $this->sql_error_msg = ""; + $tmp = new TikiPDOStatement($pq); + $pq->closeCursor(); + return $tmp; + } } - $numrows = intval($numrows); - $offset = intval($offset); - $this->convert_query($query); - $this->convert_query_table_prefixes($query); - $starttime=$this->startTimer(); - if ($numrows == -1 && $offset == -1) - $result = $this->db->Execute($query, $values); - else - $result = $this->db->SelectLimit($query, $numrows, $offset, $values); + // Queries the database reporting an error if detected + // + function query($query = null, $values = null, + $numrows = -1, $offset = -1, $reporterrors = true ) { - $this->stopTimer($starttime); + $result = $this->_query($query,$values, $nunrows, $offset); + if (!$result ) { + if ($reporterrors) { + $this->sql_error($query, $values, $result); + } + } - if (!$result ) { - if ($reporterrors) { - $this->sql_error($query, $values, $result); + return $result; + } + // Queries the database, *returning* an error if one occurs, rather + // than exiting while printing the error. + // -rlpowell + function queryError( $query, &$error, $values = null, + $numrows = -1, $offset = -1 ) { + + $result = $this->_query($query,$values, $nunrows, $offset); + if (!$result ) { + $error = $this->sql_error_msg ; + return false; } + + return $result; } - //count the number of queries made - global $num_queries; - $num_queries++; - //$this->debugger_log($query, $values); - $this->_sql = null; - return $result; -} + /** + * Sets the SQL query string for later execution. + * + * @param string The SQL query + * @param string The common table prefix + */ + function setQuery( $sql ) { + $this->_sql = $sql; + } -/** - * Sets the SQL query string for later execution. - * - * @param string The SQL query - * @param string The common table prefix - */ -function setQuery( $sql ) { - $this->_sql = $sql; -} + // Gets one column for the database. + function getOne($query, $values = null, $reporterrors = true, $offset = 0) { -// Gets one column for the database. -function getOne($query, $values = null, $reporterrors = true, $offset = 0) { - $this->convert_query($query); - $this->convert_query_table_prefixes($query); + error_reporting(E_ALL); + $result = $this->query($query, $values, 1, $offset); + $res = $result->fetchRow(); + //echo "getone "; + //print_r($res);echo "<br/>"; + list($key, $value) = each($res); + // echo "getOne value=$value<br/>"; + return $value; - $starttime=$this->startTimer(); - $result = $this->db->SelectLimit($query, 1, $offset, $values); - - if (!$result) { - if ($reporterrors) { - $this->sql_error($query, $values, $result); - $res = false; + if (!$res) { + if ($reporterrors) { + $this->sql_error($query, $values, $result); + } + return (NULL); //simulate pears behaviour } - } else { - $res = $result->fetchRow(); } - $this->stopTimer($starttime); - //count the number of queries made - global $num_queries; - $num_queries++; - //$this->debugger_log($query, $values); + // Reports SQL error from PEAR::db object. + function sql_error($query, $values, $result) { + global $smarty, $prefs, $ajaxlib; - if ($res == false) - return (NULL); //simulate pears behaviour + trigger_error($this->driver . " error: " . htmlspecialchars($this->sql_error_msg). " in query:<br /><pre>\n" . htmlspecialchars($query) . "\n</pre><br />", E_USER_WARNING); + // only for debugging. + $outp = "<div class='simplebox'><b>".htmlspecialchars(tra("An error occured in a database query!"))."</b></div>"; + $outp.= "<br /><table class='form'>"; + $outp.= "<tr class='heading'><td colspan='2'>Context:</td></tr>"; + $outp.= "<tr class='formcolor'><td>File</td><td>".htmlspecialchars(basename($_SERVER['SCRIPT_NAME']))."</td></tr>"; + $outp.= "<tr class='formcolor'><td>Url</td><td>".htmlspecialchars(basename($_SERVER['REQUEST_URI']))."</td></tr>"; + $outp.= "<tr class='heading'><td colspan='2'>Query:</td></tr>"; + $outp.= "<tr class='formcolor'><td colspan='2'><tt>".htmlspecialchars($query)."</tt></td></tr>"; + $outp.= "<tr class='heading'><td colspan='2'>Values:</td></tr>"; + foreach ($values as $k=>$v) { + if (is_null($v)) $v='<i>NULL</i>'; + else $v=htmlspecialchars($v); + $outp.= "<tr class='formcolor'><td>".htmlspecialchars($k)."</td><td>$v</td></tr>"; + } + $outp.= "<tr class='heading'><td colspan='2'>Message:</td></tr><tr class='formcolor'><td colspan='2'>".htmlspecialchars($this->sql_error_msg)."</td></tr>\n"; - list($key, $value) = each($res); - return $value; -} + $q=$query; + foreach($values as $v) { + if (is_null($v)) $v='NULL'; + else $v="'".addslashes($v)."'"; + $pos=strpos($q, '?'); + if ($pos !== FALSE) + $q=substr($q, 0, $pos)."$v".substr($q, $pos+1); + } + $outp.= "<tr class='heading'><td colspan='2'>Built query was probably:</td></tr><tr class='formcolor'><td colspan='2'>".htmlspecialchars($q)."</td></tr>\n"; -// Reports SQL error from PEAR::db object. -function sql_error($query, $values, $result) { - global $ADODB_LASTDB, $smarty, $prefs, $ajaxlib; + if (function_exists('xdebug_get_function_stack')) { + function mydumpstack($stack) { + $o=''; + foreach($stack as $line) { + $o.='* '.$line['file']." : ".$line['line']." -> ".$line['function']."(".var_export($line['params'], true).")<br />"; + } + return $o; + } + $outp.= "<tr class='heading'><th>Stack Trace</th><td>".mydumpstack(xdebug_get_function_stack())."</td></tr>"; + } - trigger_error($ADODB_LASTDB . " error: " . htmlspecialchars($this->db->ErrorMsg()). " in query:<br /><pre>\n" . htmlspecialchars($query) . "\n</pre><br />", E_USER_WARNING); - // only for debugging. - //trigger_error($ADODB_LASTDB . " error: " . $this->db->ErrorMsg(). " in query:<br />" . $query . "<br />", E_USER_WARNING); - $outp = "<div class='simplebox'><b>".htmlspecialchars(tra("An error occured in a database query!"))."</b></div>"; - $outp.= "<br /><table class='form'>"; - $outp.= "<tr class='heading'><td colspan='2'>Context:</td></tr>"; - $outp.= "<tr class='formcolor'><td>File</td><td>".htmlspecialchars(basename($_SERVER['SCRIPT_NAME']))."</td></tr>"; - $outp.= "<tr class='formcolor'><td>Url</td><td>".htmlspecialchars(basename($_SERVER['REQUEST_URI']))."</td></tr>"; - $outp.= "<tr class='heading'><td colspan='2'>Query:</td></tr>"; - $outp.= "<tr class='formcolor'><td colspan='2'><tt>".htmlspecialchars($query)."</tt></td></tr>"; - $outp.= "<tr class='heading'><td colspan='2'>Values:</td></tr>"; - foreach ($values as $k=>$v) { - if (is_null($v)) $v='<i>NULL</i>'; - else $v=htmlspecialchars($v); - $outp.= "<tr class='formcolor'><td>".htmlspecialchars($k)."</td><td>$v</td></tr>"; - } - $outp.= "<tr class='heading'><td colspan='2'>Message:</td></tr><tr class='formcolor'><td colspan='2'>".htmlspecialchars($this->db->ErrorMsg())."</td></tr>\n"; - - $q=$query; - foreach($values as $v) { - if (is_null($v)) $v='NULL'; - else $v="'".addslashes($v)."'"; - $pos=strpos($q, '?'); - if ($pos !== FALSE) - $q=substr($q, 0, $pos)."$v".substr($q, $pos+1); - } - - $outp.= "<tr class='heading'><td colspan='2'>Built query was probably:</td></tr><tr class='formcolor'><td colspan='2'>".htmlspecialchars($q)."</td></tr>\n"; + $outp.= "</table>"; + //if($result===false) echo "<br>\$result is false"; + //if($result===null) echo "<br>\$result is null"; + //if(empty($result)) echo "<br>\$result is empty"; - if (function_exists('xdebug_get_function_stack')) { - function mydumpstack($stack) { - $o=''; - foreach($stack as $line) { - $o.='* '.$line['file']." : ".$line['line']." -> ".$line['function']."(".var_export($line['params'], true).")<br />"; - } - return $o; - } - $outp.= "<tr class='heading'><th>Stack Trace</th><td>".mydumpstack(xdebug_get_function_stack())."</td></tr>"; - } + $showviaajax=false; + if ($prefs['feature_ajax'] == 'y') { + global $ajaxlib; + include_once('lib/ajax/xajax.inc.php'); + if ($ajaxlib && $ajaxlib->canProcessRequests()) { + // this was a xajax request -> return a xajax answer + $objResponse = new xajaxResponse(); + $page ="<html><head>"; + $page.=" <title>Tiki SQL Error (xajax)</title>"; + $page.=" <link rel='stylesheet' href='styles/tikineat.css' type='text/css' />"; + $page.="</head><body>$outp</body></html>"; + $page=addslashes(str_replace(array("\n", "\r"), array(' ', ' '), $page)); + $objResponse->addScript("bugwin=window.open('', 'tikierror', 'width=760,height=500,scrollbars=1,resizable=1');". + "bugwin.document.write('$page');"); + echo $objResponse->getOutput(); + die(); + } + } - $outp.= "</table>"; - //if($result===false) echo "<br>\$result is false"; - //if($result===null) echo "<br>\$result is null"; - //if(empty($result)) echo "<br>\$result is empty"; - - $showviaajax=false; - if ($prefs['feature_ajax'] == 'y') { - global $ajaxlib; - include_once('lib/ajax/xajax.inc.php'); - if ($ajaxlib && $ajaxlib->canProcessRequests()) { - // this was a xajax request -> return a xajax answer - $objResponse = new xajaxResponse(); - $page ="<html><head>"; - $page.=" <title>Tiki SQL Error (xajax)</title>"; - $page.=" <link rel='stylesheet' href='styles/tikineat.css' type='text/css' />"; - $page.="</head><body>$outp</body></html>"; - $page=addslashes(str_replace(array("\n", "\r"), array(' ', ' '), $page)); - $objResponse->addScript("bugwin=window.open('', 'tikierror', 'width=760,height=500,scrollbars=1,resizable=1');". - "bugwin.document.write('$page');"); - echo $objResponse->getOutput(); - die(); + if ( ! isset($_SESSION['fatal_error']) ) { + // Do not show the error if an error has already occured during the same script execution (error.tpl already called), + // because tiki should have died before another error. + // This happens when error.tpl is called by tiki.sql... and tiki.sql is also called again in error.tpl, entering in an infinite loop. + require_once('tiki-setup.php'); + if ( $smarty ) { + $smarty->assign('msg', $outp); + $_SESSION['fatal_error'] = 'y'; + $smarty->display('error.tpl'); + unset($_SESSION['fatal_error']); + } else { + echo $outp; + } + die; } - } - - if ( ! isset($_SESSION['fatal_error']) ) { - // Do not show the error if an error has already occured during the same script execution (error.tpl already called), - // because tiki should have died before another error. - // This happens when error.tpl is called by tiki.sql... and tiki.sql is also called again in error.tpl, entering in an infinite loop. - require_once('tiki-setup.php'); - if ( $smarty ) { - $smarty->assign('msg', $outp); - $_SESSION['fatal_error'] = 'y'; - $smarty->display('error.tpl'); - unset($_SESSION['fatal_error']); - } else { - echo $outp; } - die; - } -} -function ifNull($narg1,$narg2) { - return $this->db->ifNull($narg1,$narg2); -} + // functions to support DB abstraction + // unsused (Sept) + function convert_query(&$query) { -// functions to support DB abstraction -function convert_query(&$query) { - global $ADODB_LASTDB; + switch ($this->driver) { + case "oci8": + $query = preg_replace("/`/", "\"", $query); - switch ($ADODB_LASTDB) { - case "oci8": - $query = preg_replace("/`/", "\"", $query); + // convert bind variables - adodb does not do that + $qe = explode("?", $query); + $query = ''; - // convert bind variables - adodb does not do that - $qe = explode("?", $query); - $query = ''; + $temp_max = sizeof($qe) - 1; + for ($i = 0; $i < $temp_max; $i++) { + $query .= $qe[$i] . ":" . $i; + } - $temp_max = sizeof($qe) - 1; - for ($i = 0; $i < $temp_max; $i++) { - $query .= $qe[$i] . ":" . $i; - } + $query .= $qe[$i]; + break; - $query .= $qe[$i]; - break; + case "postgres7": + case "postgres8": + case "sybase": + $query = preg_replace("/`/", "\"", $query); + break; - case "postgres7": - case "postgres8": - case "sybase": - $query = preg_replace("/`/", "\"", $query); - break; + case "mssql": + $query = preg_replace("/`/","",$query); + $query = preg_replace("/\?/","'?'",$query); + break; - case "mssql": - $query = preg_replace("/`/","",$query); - $query = preg_replace("/\?/","'?'",$query); - break; + case "sqlite": + $query = preg_replace("/`/", "", $query); + break; + } + } - case "sqlite": - $query = preg_replace("/`/", "", $query); - break; - } -} + function convert_query_table_prefixes(&$query) { -function convert_query_table_prefixes(&$query) { + $db_table_prefix = isset($GLOBALS["db_table_prefix"])?$GLOBALS["db_table_prefix"]:'' ; + $common_tiki_users = isset($GLOBALS["common_tiki_users"])?$GLOBALS["common_tiki_users"]:''; + $common_users_table_prefix = isset($GLOBALS["common_users_table_prefix"])?$GLOBALS["common_users_table_prefix"]:''; - $db_table_prefix = isset($GLOBALS["db_table_prefix"])?$GLOBALS["db_table_prefix"]:'' ; - $common_tiki_users = isset($GLOBALS["common_tiki_users"])?$GLOBALS["common_tiki_users"]:''; - $common_users_table_prefix = isset($GLOBALS["common_users_table_prefix"])?$GLOBALS["common_users_table_prefix"]:''; + if ( isset($db_table_prefix) && !is_null($db_table_prefix) && !empty($db_table_prefix) ) { - if ( isset($db_table_prefix) && !is_null($db_table_prefix) && !empty($db_table_prefix) ) { + //printf("convert_query_table_prefixes():\$db_table_prefix = %s<br />\n", $db_table_prefix ); - //printf("convert_query_table_prefixes():\$db_table_prefix = %s<br />\n", $db_table_prefix ); + if( isset($common_users_table_prefix) && !is_null($common_users_table_prefix) && !empty($common_users_table_prefix) ) { + $query = str_replace("`users_", "`".$common_users_table_prefix."users_", $query); + } else { + $query = str_replace("`users_", "`".$db_table_prefix."users_", $query); + } - if( isset($common_users_table_prefix) && !is_null($common_users_table_prefix) && !empty($common_users_table_prefix) ) { - $query = str_replace("`users_", "`".$common_users_table_prefix."users_", $query); - } else { - $query = str_replace("`users_", "`".$db_table_prefix."users_", $query); - } + $query = str_replace("`tiki_", "`".$db_table_prefix."tiki_", $query); + $query = str_replace("`messu_", "`".$db_table_prefix."messu_", $query); + $query = str_replace("`sessions", "`".$db_table_prefix."sessions", $query); + $query = str_replace("`galaxia_", "`".$db_table_prefix."galaxia_", $query); - $query = str_replace("`tiki_", "`".$db_table_prefix."tiki_", $query); - $query = str_replace("`messu_", "`".$db_table_prefix."messu_", $query); - $query = str_replace("`sessions", "`".$db_table_prefix."sessions", $query); - $query = str_replace("`galaxia_", "`".$db_table_prefix."galaxia_", $query); + //printf("convert_query_table_prefixes():\$query = %s<br />\n", $query ); + } + } - //printf("convert_query_table_prefixes():\$query = %s<br />\n", $query ); - } -} + function blob_encode(&$blob) { + //FIXME + return; + switch($this->db->blobEncodeType) { + case 'I': + $blob=$this->db->BlobEncode($blob); + break; + case 'C': + $blob=$this->db->qstr($this->db->BlobEncode($blob)); + break; + case 'false': + default: + } + } -function blob_encode(&$blob) { - switch($this->db->blobEncodeType) { - case 'I': - $blob=$this->db->BlobEncode($blob); - break; - case 'C': - $blob=$this->db->qstr($this->db->BlobEncode($blob)); - break; - case 'false': - default: - } -} + function convert_sortmode($sort_mode) { -function convert_sortmode($sort_mode) { - global $ADODB_LASTDB; + if ( !$sort_mode ) { + return ''; + } + // parse $sort_mode for evil stuff + $sort_mode = str_replace('pref:','',$sort_mode); + $sort_mode = preg_replace('/[^A-Za-z_,.]/', '', $sort_mode); - if ( !$sort_mode ) { - return ''; - } - // parse $sort_mode for evil stuff - $sort_mode = str_replace('pref:','',$sort_mode); - $sort_mode = preg_replace('/[^A-Za-z_,.]/', '', $sort_mode); + if ($sort_mode == 'random') { + $map = array("postgres7" => "RANDOM()", + "postgres8" => "RANDOM()", + "mysql3" => "RAND()", + "mysql" => "RAND()", + "mysqli" => "RAND()", + "mssql" => "NEWID()", + "firebird" => "1", // does this exist in tiki? - if ($sort_mode == 'random') { - $map = array("postgres7" => "RANDOM()", - "postgres8" => "RANDOM()", - "mysql3" => "RAND()", - "mysql" => "RAND()", - "mysqli" => "RAND()", - "mssql" => "NEWID()", - "firebird" => "1", // does this exist in tiki? + // below is still needed, return 1 just for not breaking query + "oci8" => "1", + "sqlite" => "1", + "sybase" => "1"); - // below is still needed, return 1 just for not breaking query - "oci8" => "1", - "sqlite" => "1", - "sybase" => "1"); + return $map[$this->driver]; + } - return $map[$ADODB_LASTDB]; - } + $sorts=explode(',', $sort_mode); + foreach($sorts as $k => $sort) { - $sorts=explode(',', $sort_mode); - foreach($sorts as $k => $sort) { + // force ending to either _asc or _desc unless it's "random" + $sep = strrpos($sort, '_'); + $dir = substr($sort, $sep); + if (($dir !== '_asc') && ($dir !== '_desc')) { + if ( $sep != (strlen($sort) - 1) ) { + $sort .= '_'; + } + $sort .= 'asc'; + } - // force ending to either _asc or _desc unless it's "random" - $sep = strrpos($sort, '_'); - $dir = substr($sort, $sep); - if (($dir !== '_asc') && ($dir !== '_desc')) { - if ( $sep != (strlen($sort) - 1) ) { - $sort .= '_'; + switch ($this->driver) { + case "postgres7": + case "postgres8": + case "oci8": + case "sybase": + case "mssql": + $sort = preg_replace('/_asc$/', '" asc', $sort); + $sort = preg_replace('/_desc$/', '" desc', $sort); + $sort = '"' . $sort; + break; + + case "sqlite": + $sort = preg_replace('/_asc$/', ' asc', $sort); + $sort = preg_replace('/_desc$/', ' desc', $sort); + break; + + case "mysql3": + case "mysql": case "mysqli": + default: + $sort = preg_replace('/_asc$/', '` asc', $sort); + $sort = preg_replace('/_desc$/', '` desc', $sort); + $sort = '`' . $sort; + $sort = str_replace('.', '`.`', $sort); + break; + } + $sorts[$k]=$sort; } - $sort .= 'asc'; - } - - switch ($ADODB_LASTDB) { - case "postgres7": - case "postgres8": - case "oci8": - case "sybase": - case "mssql": - $sort = preg_replace('/_asc$/', '" asc', $sort); - $sort = preg_replace('/_desc$/', '" desc', $sort); - $sort = '"' . $sort; - break; - case "sqlite": - $sort = preg_replace('/_asc$/', ' asc', $sort); - $sort = preg_replace('/_desc$/', ' desc', $sort); - break; - - case "mysql3": - case "mysql": case "mysqli": - default: - $sort = preg_replace('/_asc$/', '` asc', $sort); - $sort = preg_replace('/_desc$/', '` desc', $sort); - $sort = '`' . $sort; - $sort = str_replace('.', '`.`', $sort); - break; + $sort_mode=implode(',', $sorts); + return $sort_mode; } - $sorts[$k]=$sort; - } - $sort_mode=implode(',', $sorts); - return $sort_mode; -} + function convert_binary() { -function convert_binary() { - global $ADODB_LASTDB; + switch ($this->driver) { + case "oci8": + case "postgres7": + case "postgres8": + case "sqlite": + return; + break; - switch ($ADODB_LASTDB) { - case "oci8": - case "postgres7": - case "postgres8": - case "sqlite": - return; - break; + case "mysql3": + case "mysql": + case "mysqli": + return "binary"; + break; + } + } - case "mysql3": - case "mysql": - case "mysqli": - return "binary"; - break; - } -} + function sql_cast($var,$type) { -function sql_cast($var,$type) { - global $ADODB_LASTDB; - switch ($ADODB_LASTDB) { - case "sybase": - switch ($type) { - case "int": - return " CONVERT(numeric(14,0),$var) "; - break; - case "string": - return " CONVERT(varchar(255),$var) "; - break; - case "float": - return " CONVERT(numeric(10,5),$var) "; - break; - } - break; + switch ($this->driver) { + case "sybase": + switch ($type) { + case "int": + return " CONVERT(numeric(14,0),$var) "; + break; + case "string": + return " CONVERT(varchar(255),$var) "; + break; + case "float": + return " CONVERT(numeric(10,5),$var) "; + break; + } + break; - default: - return($var); - break; - } + default: + return($var); + break; + } + } -} -function debugger_log($query, $values) -{ - // Will spam only if debug parameter present in URL - // \todo DON'T FORGET TO REMOVE THIS BEFORE 1.8 RELEASE - if (!isset($_REQUEST["debug"])) return; - // spam to debugger log - include_once ('lib/debug/debugger.php'); - global $debugger; - if (is_array($values) && strpos($query, '?')) - foreach ($values as $v) - { - $q = strpos($query, '?'); - if ($q) - { - $tmp = substr($query, 0, $q)."'".$v."'".substr($query, $q + 1); - $query = $tmp; - } - } + function debugger_log($query, $values) + { + // Will spam only if debug parameter present in URL + // \todo DON'T FORGET TO REMOVE THIS BEFORE 1.8 RELEASE + if (!isset($_REQUEST["debug"])) return; + // spam to debugger log + include_once ('lib/debug/debugger.php'); + global $debugger; + if (is_array($values) && strpos($query, '?')) + foreach ($values as $v) + { + $q = strpos($query, '?'); + if ($q) + { + $tmp = substr($query, 0, $q)."'".$v."'".substr($query, $q + 1); + $query = $tmp; + } + } - $debugger->msg($this->num_queries.': '.$query); - } + $debugger->msg($this->num_queries.': '.$query); + } } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |