AdoDB MySQL und Prepared Statements

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
Harald Stowasser [ Fr, 25 Mai 2007 12:42 ] [ ID #1723258 ]

Re: AdoDB MySQL und Prepared Statements

On 25 Mai, 12:42, Harald Stowasser <stowas... [at] freinet.de> 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 ?
max.schulze [ Mi, 13 Juni 2007 14:54 ] [ ID #1736907 ]

Re: AdoDB MySQL und Prepared Statements

max.schulze [at] 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:

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

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
Harald Stowasser [ Fr, 03 August 2007 22:39 ] [ ID #1786368 ]
PHP » de.comp.lang.php.datenbanken » AdoDB MySQL und Prepared Statements

Vorheriges Thema: Addition von Datensatz-Zahlen
Nächstes Thema: Fehlermeldung SQL