Adodb Treiber für Mysql ändern !
Posted: Fri Aug 19, 2005 1:45 pm
Auch wer noch keine Probleme bekommen hat sollte die Treiber adodb-mysql.inc.php bzw. dir für mysqli ändern.
Wie bekannt verwendet diese CMS eine gehackte Adodb - Version.
Ein Hack ist gefährlich, da er gegen alle elementaren Regeln der object orientierten Programmierung verstößt.
In der Praxis hat das bereits zu unerklärlichem Verhalten inkusive Memory Overflow geführt.
Gemeint ist diese Stelle:
Original:
function _query($sql,$inputarr)
{
//global $ADODB_COUNTRECS;
//if($ADODB_COUNTRECS)
return mysql_query($sql,$this->_connectionID);
//else return @mysql_unbuffered_query($sql,$this->_connectionID); // requires PHP >= 4.0.6
}
Hacked Version
function _query($sql,$inputarr)
{
//global $ADODB_COUNTRECS;
//if($ADODB_COUNTRECS)
global $gCms;
global $sql_queries;
if ($gCms->config["debug"] == true)
{
$sql_queries .= "
$sql
\n";
}
return mysql_query($sql,$this->_connectionID);
//else return @mysql_unbuffered_query($sql,$this->_connectionID); // requires PHP >= 4.0.6
}
Hier verwendet der Programmierer die globale Variable $gCms innerhalb einer Adodb - Funktion, die dazu noch einige Male direkt oder indirekt aufgerufen wird (je nach eigentlichem Funktionsaufruf). Die $gCms enthält jedoch selbst die ganze Adodbd - Klasse in der sie widerum verwendet wird.
In OOP ist das nicht zulässig und ist in etwa mit den Worten vergleichbar " an den eigenen Haaren aus dem Wasser ziehen ..."
Eigentlich ein Kardinalfehler, der so hätte eigentlich nicht passieren dürfen.
Da diese unzulässige Einbindung vom User selbst nicht benötigt wird (nur von Wishy zum debuggen) die dringende Empfehlung - rauswerfen und auf das Original zurückführen .
Wie bekannt verwendet diese CMS eine gehackte Adodb - Version.
Ein Hack ist gefährlich, da er gegen alle elementaren Regeln der object orientierten Programmierung verstößt.
In der Praxis hat das bereits zu unerklärlichem Verhalten inkusive Memory Overflow geführt.
Gemeint ist diese Stelle:
Original:
function _query($sql,$inputarr)
{
//global $ADODB_COUNTRECS;
//if($ADODB_COUNTRECS)
return mysql_query($sql,$this->_connectionID);
//else return @mysql_unbuffered_query($sql,$this->_connectionID); // requires PHP >= 4.0.6
}
Hacked Version
function _query($sql,$inputarr)
{
//global $ADODB_COUNTRECS;
//if($ADODB_COUNTRECS)
global $gCms;
global $sql_queries;
if ($gCms->config["debug"] == true)
{
$sql_queries .= "
$sql
\n";
}
return mysql_query($sql,$this->_connectionID);
//else return @mysql_unbuffered_query($sql,$this->_connectionID); // requires PHP >= 4.0.6
}
Hier verwendet der Programmierer die globale Variable $gCms innerhalb einer Adodb - Funktion, die dazu noch einige Male direkt oder indirekt aufgerufen wird (je nach eigentlichem Funktionsaufruf). Die $gCms enthält jedoch selbst die ganze Adodbd - Klasse in der sie widerum verwendet wird.
In OOP ist das nicht zulässig und ist in etwa mit den Worten vergleichbar " an den eigenen Haaren aus dem Wasser ziehen ..."
Eigentlich ein Kardinalfehler, der so hätte eigentlich nicht passieren dürfen.
Da diese unzulässige Einbindung vom User selbst nicht benötigt wird (nur von Wishy zum debuggen) die dringende Empfehlung - rauswerfen und auf das Original zurückführen .