Dieser Abschnitt enthält häufige Fragen über die Verbindung von PHP und Datenbanken. PHP kann in der Tat auf praktisch jede verfügbare Datenbank zugreifen.
Ich habe gehört, dass es möglich ist, den Microsoft SQL-Server aus PHP anzusprechen. Wie?
Auf einem Windows-Rechner können Sie einfach die eingeschlossene ODBC-Unterstützung mit dem passenden Treiber verwenden.
Auf einem Unix-Rechner können Sie die Sybase-CT-Treiber benutzen, um auf Microsoft SQL-Server zuzugreifen, weil diese ein (zumindest nahezu) kompatibles Protokoll aufweisen. Sybase hat eine » freie Version der benötigten Bibliotheken für Linux-Systeme erstellt. Sehen Sie sich auch die Antwort auf die nächste Frage an.
Kann ich auf Microsoft Access-Datenbanken zugreifen?
Ja. Sie haben bereits alle nötigen Werkzeuge, wenn sie komplett unter Windows 9x/Me oder NT/2000 arbeiten, wo Sie ODBC und die ODBC-Treiber von Microsoft benutzen können, um auf Microsoft Access-Datenbanken zuzugreifen.
Wenn Sie PHP auf einem Unix-Rechner betreiben und auf MS Access auf einem Windows-Rechner zugreifen wollen, brauchen sie ODBC-Treiber für Unix. » OpenLink Software bietet Unix-basierte ODBC-Treiber an, die dazu geeignet sind.
Eine weitere Alternative ist es, einen SQL-Server zu benutzen, der ODBC-Treiber für Windows anbietet und diesen dann zu benutzen, um die Daten dort abzulegen, um sie dann von Microsoft Access (über ODBC) und PHP (mit den mitgelieferten Treibern) aus anzusprechen, oder ein dazwischengeschaltetetes Dateiformat zu benutzen, das sowohl Access als auch PHP verstehen, beispielsweise Plaintext oder dBase-Datenbanken. Zu diesem Punkt schreibt Tim Hayes von OpenLink Software:
Eine andere Datenbank als vermittelndes Element zu benutzen ist keine gute Idee, wenn Sie ODBC direkt von PHP aus zur Datenbank benutzen können - etwa mit den Openlink-Treibern. Wenn Sie wirklich ein zwischengeschaltetes Dateiformat benötigen, hat Openlink jetzt Virtuoso (eine virtuelle Datenbank) für NT, Linux und andere Unix-Plattformen herausgebracht. Bitte besuchen Sie unsere » Webseite, wenn Sie Virtuoso kostenlos herunterladen wollen.
Eine Möglichkeit, die sich als erfolgreich herausgestellt hat, ist die Benutzung von MySQL und den MyODBC-Treibern unter Windows, um die Datenbanken zu synchronisieren. Steve Lawrence schreibt dazu:
Tipps und Tricks:
PHP 5 liefert keine MySQL-Client-Bibliotheken mehr mit aus, was bedeutet das für mich? Kann ich MySQL immer noch mit PHP benutzen? Wenn ich es versuche, bekomme ich "function undefined"-Errors, was ist passiert?
Ja. Es wird immer eine MySQL-Unterstützung in PHP geben. Die einzige Änderung in PHP 5 ist, dass die eigentliche Client-Bibliothek nicht mehr mitgeliefert wird. Hier sind einige Gründe:
Die meisten Systeme haben heutzutage die Client-Bibliothek schon installiert.
Gegeben den oben genannten Fall, kann es Probleme mit verschiedenen Versionen von Client-Bibliotheken geben. Wenn man etwa mod_auth_mysql gegen eine Version linkt und PHP gegen eine andere und dann beide im Apache einschaltet, gibt es einen schönen netten Absturz. Außerdem hat die mitgelieferte Bibliothek nicht immer richtig mit der installiertet Serverversion zusammengespielt. Das offensichtlichste Symptom war die Uneinigkeit, wo die Unix-Domain-Socket-Datei mysql.socket zu finden ist.
Die Wartung war etwas lax und die Bibliothek fiel immer mehr und mehr hinter der aktuellen Version zurück.
Die zukünftigen Versionen der Bibliothek stehen unter der GPL und es gibt keine Update-Möglichkeit, da wir keine Bibliothek, die unter der GPL steht, mit einem Projekt unter einer BSD/Apache-ähnlichen Lizenz mitliefern können. Eine saubere Abspaltung mit PHP 5 schien die beste Möglichkeit zu sein.
Dies wird wahrscheinlich nicht besonders viele Leute betreffen. Unix-Benutzer, zumindest die, die wissen, was sie tun, neigen dazu, PHP so zu kompilieren, dass es gegen die libmyqlclient-Bibliothek ihres Systems gelinkt ist, indem sie einfach --with-mysql=/usr angeben. Windows-Benutzer können die Erweiterung php_mysql.dll in der php.ini einschalten. Für weitere Details besuchen Sie bitte die MySQL-Referenz, um an Anweisungen zur Installation zu gelangen. Versichern Sie sich auch, dass die Datei libmysql.dll in der PATH-variable des Systems vorhanden ist. Wie das funktioniert, können Sie unter Wie füge ich unter Windows PATH mein PHP-Verzeichnis hinzu? nachlesen. Weil libmysql.dll (und viele andere Dateien) im PHP-Ordner liegen, sollten Sie den PHP-Ordner zur PATH-variable hinzufügen.
Nach der Installation der Unterstützung für shared-MySQL stürzt der Apache mit einem coredump an, sobald libphp4.so geladen wird. Kann man das beheben?
Wenn Ihre MySQL-Bibliotheken gegen pthreads gelinkt sind, wird das passieren. Sehen Sie mit ldd nach. Wenn sie es sind, schnappen Sie sich den MySQL-Tarball und kompilieren Sie es, oder kompilieren Sie es neu aus dem Source-RPM und entfernen Sie den Schalter in der spec-Datei, der den threaded-client-code einschaltet. Beide Lösungen werden dieses Problem beheben. Kompilieren Sie PHP dann mit den neuen MySQL-Bibliotheken.
Wieso bekomme ich so eine Fehlermeldung: "Warning: 0 is not a MySQL result index in <file> on line <x>" or "Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>"?
Sie versuchen, einen result identifier zu benutzen, der 0 ist. Die 0 bedeutet, dass Ihre Abfrage aus irgend einem Grund fehlgeschlagen ist. Sie sollten auf Fehlermeldungen überprüfen, nachdem Sie Ihre Abfrage losgeschickt haben und bevor Sie versuchen, mit dem Ergebnis zu arbeiten. Dies kann mit diesem oder ähnlichem Code bewerkstelligt werden:
<?php
$result = mysql_query("SELECT * FROM tables_priv");
if (!$result) {
echo mysql_error();
exit;
}
?>
oder
<?php
$result = mysql_query("SELECT * FROM tables_priv")
or die("Bad query: " . mysql_error());
?>