Sven: Welche ADOdb Verbindung zur Nutzung von Prepared Statements?

Hallo,

ich wollte für mein neuestes Projekt ADOdb nutzen... dadurch wäre ich unabhängig von dem Datenbank-System an sich, und was mir auch gefallen hat, dass ADOdb für mich POST-Daten maskieren kann.

Ich habe diese Seite entdeckt, da wird das ausführlich beschrieben:
Prepared Statements

Demnach muss man eine PDO-Verbindung herstellen:

$user = "myuser";  
$password = "mypassword";  
  
$dbc = new PDO("mysql:host=localhost;dbname=mydb", $user, $password);

Anschließend kann man Prepared Statements nutzen:

$sql = "SELECT userid FROM users WHERE username = :username AND password = :password";  
$stmt = $dbc->prepare($sql);  
  
$stmt->bindParam( ':username', $_POST['username'] );

Auf der offiziellen Website von ADOdb wird jedoch diese Art der Verbindungsherstellung empfohlen:

  
require_once(BASEDIR.'/includes/adodb/adodb.inc.php');  
$db = ADONewConnection('mysql');  
$result = $db->Connect("$dbhost", "$dbuser", "$dbpass", "$dbname");

Das erscheint mir auch praktischer: Statt 'mysql' kann ich eine der vielen Datenbank-Typen angeben, die von ADOdb unterstützt werden. Aber Prepared Statements funktionieren damit nicht, oder? Wenn ich $db->bindParam() teste, erhalte ich jedenfalls eine Fehlermeldung:

"Fatal error: Call to a member function bindParam() on a non-object in \htdocs\index.php on line 23"

Gibt es nennenswerte Unterschiede zwischen beiden Varianten? Spricht etwas dagegen, Prepared Statements zu nutzen und die POST-Daten von ADOdb maskieren zu lassen?

Grüße
Sven

  1. echo $begrüßung;

    ich wollte für mein neuestes Projekt ADOdb nutzen... dadurch wäre ich unabhängig von dem Datenbank-System an sich, [...]

    Das halte ich für einen der populären Irrtürmer beim Einsatz von Datenbankabstraktionsschichten. Richtiger finde ich, wenn du aus Portabilitätsgründen auf einen DB-Layer setzt, dass du nun nur noch grundlegendes SQL sprechen kannst, und dich damit teilweise erheblichen Einbußen bei Leistungsmerkmalen hingeben musst. Viele Dinge, die ein DBMS effektiver als eine abfragende Umgebung lösen kann sind auf proprietäre Weise gelöst und damit nicht portabel. Einen Vorteil sehe ich nur darin, dass die Handhabung der Funktionen, mit denen man eine Query absetzt oder das Ergebnis abholt (Fetch) gleich bleibt.

    Beim Beispiel Prepared Statements muss man teilweise auch mit DB-Layer individuelle Schreibweisen bei den Platzhalternamen verwenden.

    [...] und was mir auch gefallen hat, dass ADOdb für mich POST-Daten maskieren kann.
    Ich habe diese Seite entdeckt, da wird das ausführlich beschrieben: Prepared Statements
    Demnach muss man eine PDO-Verbindung herstellen:

    ADO ist aber nicht PDO. ADO, PDO und die beiden im Artikel kurz erwähnten PEAR::DB und PEAR::MDB2 sind jeweils verschiedene DB-Layer-Implementationen. Die Bedienungsweise des einen am anderen anwenden zu wollen funktioniert nicht. Gehe gemäß der jeweiligen Dokumentation des Systemes vor.

    Gibt es nennenswerte Unterschiede zwischen beiden Varianten?

    Sicher. ADO ist in PHP geschrieben, PDO ein in PHP integriertes Modul. Die restlichen Eigenarten stehen in der jeweiligen Dokumentation.

    Spricht etwas dagegen, Prepared Statements zu nutzen und die POST-Daten von ADOdb maskieren zu lassen?

    Ja, du kannst nicht beide Systeme mischen. Beide bieten aber beide von dir gewünschten Features an. Aber auch bei diesen ist es nicht notwendig, sie zu mischen. Entweder Prepared Statements verwenden, oder Statement selbst zusammenbauen, dann aber mit der jeweils notwendigen kontextgerechten Notation von Daten. Eine Mischform ist zwar möglich, aber in vermutlich allen Fällen unsinnig und durch Prepared Statements ersetzbar.

    $result = $db->Connect("$dbhost", "$dbuser", "$dbpass", "$dbname");

    Einzeln stehende Variablennamen in "" einzurahmen ist unsinnig.

    echo "$verabschiedung $name";

  2. Hallo,

    ich glaube, du vermixt hier etwas, was nicht zusammen gehört. Du kannst entweder ADOdb nutzen, oder PDO - such dir was aus.

    PDO ist Bestandteil von PHP5. Das ist einer der Gründe, warum ich gerne PDO verwende.

    Und in dem von der verlinkten Tutorial geht es nur um PDO, nicht um ADOdb.

    Beste Grüße
    Lars

    --
    Zuletzt fertiggestelltes Projekt:
    | Kostenlos chatten bei inTalk.de |