AdoDB MySQL und Prepared Statements

AdoDB MySQL und Prepared Statements

am 25.05.2007 12:42:22 von Harald Stowasser

Hallo liebe dclpd Leser,

ich möchte gerne Prepared Statements[1] mit AdoDB[2] nutzen. Folgendes
Programmschnipsel funktioniert auch:

$conn= ADONewConnection( "mysqli" );
$conn->Connect( xx,xx,xx,xx );
$conn->SetFetchMode( ADODB_FETCH_NUM );
$sql = 'SELECT piece_id FROM piece WHERE piece_id=?';
$conn->preparedStr = $conn->Prepare($sql);
$result=$conn->Execute($conn->preparedStr,Array((Int) 2));

Leider denke ich das AdoDB noch keine Server-Side Prepared macht, da im
Mysql-Log folgendes steht:

572 Connect xx on xx
572 Init DB xx
572 Query SELECT piece_id FROM piece p WHERE piece_id=2
572 Quit

Eigentlich sollte im Log doch das PREPARE- und EXECUTE-Statement auch
sichtbar sein?



MySql-version = 5.0.32-Debian
PHP-Version = 5.2.0-8+etch3
AdoDB-Version = 5.00 (05 Feb 2007)

[1] http://dev.mysql.com/doc/refman/5.0/en/sqlps.html
[2] http://phplens.com/lens/adodb/docs-adodb.htm

Re: AdoDB MySQL und Prepared Statements

am 13.06.2007 14:54:45 von max.schulze

On 25 Mai, 12:42, Harald Stowasser wrote:
> Hallo liebe dclpd Leser,
>
> ich möchte gerne Prepared Statements[1] mit AdoDB[2] nutzen. Folgendes
> Programmschnipsel funktioniert auch:
>
> $conn=3D ADONewConnection( "mysqli" );
> $conn->Connect( xx,xx,xx,xx );
> $conn->SetFetchMode( ADODB_FETCH_NUM );
> $sql =3D 'SELECT piece_id FROM piece WHERE piece_id=3D?';
> $conn->preparedStr =3D $conn->Prepare($sql);
> $result=3D$conn->Execute($conn->preparedStr,Array((Int) 2));
>
> Leider denke ich das AdoDB noch keine Server-Side Prepared macht, da im
> Mysql-Log folgendes steht:
>
> 572 Connect xx on xx
> 572 Init DB xx
> 572 Query SELECT piece_id FROM piece p WHERE piece_id=3D2
> 572 Quit
>
> Eigentlich sollte im Log doch das PREPARE- und EXECUTE-Statement auch
> sichtbar sein?
>
> MySql-version =3D 5.0.32-Debian
> PHP-Version =3D 5.2.0-8+etch3
> AdoDB-Version =3D 5.00 (05 Feb 2007)
>
> [1]http://dev.mysql.com/doc/refman/5.0/en/sqlps.html
> [2]http://phplens.com/lens/adodb/docs-adodb.htm

Nein ADO Db ist ein abstraction layer, sollte das also eigentlich
können, er regelt das aber intern, was an sich auch keine schwere
Sache ist mit OOP.
Wie wärs wenn du den PHP internen abstraction layer nutzt, also seit
PHP 5 PDO_MySQL ?

Re: AdoDB MySQL und Prepared Statements

am 03.08.2007 22:39:13 von Harald Stowasser

max.schulze@googlemail.com schrieb:
>
>> Eigentlich sollte im Log doch das PREPARE- und EXECUTE-Statement auch
>> sichtbar sein?
....
> Nein ADO Db ist ein abstraction layer, sollte das also eigentlich
> können, er regelt das aber intern, was an sich auch keine schwere
> Sache ist mit OOP.

Bei PDO sieht man die beiden Kommandos. In ADOBD (mysqli) sind die
PREPARE-kommandos auskommentiert, bzw. werden übersprungen.

Guckst du:


function Prepare($sql)
{
return $sql;
$stmt = $this->_connectionID->prepare($sql);
if (!$stmt) {
echo $this->ErrorMsg();
return $sql;
}
return array($sql,$stmt);
}


Prepared Statements haben für mich nicht nur den Vorteil das sie
sicherer sind, sondern auch der Geschwindigkeitsvorteil ist für mich
sehr wichtig. Der geht bei der 'internen' Verwaltung von adodb natürlich
flöten.

> Wie wärs wenn du den PHP internen abstraction layer nutzt, also seit
> PHP 5 PDO_MySQL ?

Jo genau das machen wir mittlerweile auch.


--
Sie wollen mir was gutes tun? Amazon -Wunschliste:
http://www.amazon.de/gp/registry/2GU2EBXFCM49