Txt-db-api mit PEAR verwenden

Im Verzeichnis pear findet man seit neustem eine Datei txtdbapi.php.
Dabei handelt es sich um einen Text-Db-Api Datenbankwrapper für PEAR.

Installation

Diese Datei wird zu den anderen Datenbankwrappern in das Verzeichnis

/usr/share/php/DB/ (üblich bei *nix installationen) oder <php-installation>/PEAR/DB (auf windows) kopiert werden.

Der connect-String für die Txt-Db-Api sieht folgendermassen aus:
txtdbapi://localhost/<dbname>


Beispiel


So könnte dann eine Beispiel Datenabfrage aussehen:
Code:
<?

include "DB.php";
include "txt-db-api.php";

$dbc = DB::connect("txtdbapi://localhost/soulspring");
//$dbc = DB::connect("mysql://user:password@localhost/soulspring");

$dbc->setFetchMode(DB_FETCHMODE_ASSOC);

// Einfacher SELECT mit Ausgabe
$result = $dbc->query("SELECT * FROM news");

if (PEAR::isError($result)) {
   print $result->getUserInfo();
}

if ($result->numRows()) {
   $row = array();
   while($row = $result->fetchRow()) {
      print_r($row);
   }
} else {
   print "No results available\n";
}

// Test für UPDATE und affectedRows()
$dbc->query("UPDATE news SET titel = 'Txt-Db-Api goes PEAR' WHERE id = '5' ");
print "Affected Rows: " . $dbc->affectedRows();

// Andere Tests:
// getAll() liefert alle Datensätze
// getCol() liefert nur eine bestimmte Spalte (0=erste Spaltem, 1=zweite, ...)
print_r($dbc->getAll("SELECT * FROM programm", null, DB_FETCHMODE_ASSOC));
print_r($dbc->getCol("SELECT * FROM programm", 1));

$dbc->disconnect();

?>


Wenn der andere connect string oben auskommentiert wird, dann läuft das ganze ohne Problem unter MySQL, oder auch anderen Datenbanken.

Wenn man keinen Zugriff auf das PEAR verzeichnis hat (wie bei vielen Webprovídern), dann reicht es GLAUB ich auch, nur folgende Dateien auf den Server zu laden:
Code:
WEB-ROOT
|
|--include
|  |
|  `-- DB
|      |
|      |-- common.php
|      |-- storage.php
|      `-- txtdbapi.php
|-- DB.php
`-- PEAR.php


Im code kann man dann das PEAR::DB Modul so einbinden:
include "/include/DB.php"

Dieser
Workaround  ist noch Experimentell. Der Entwickler legt für diesen Workaround nicht seine Hand ins Feier ;-)
Probiert es einfach mal aus.