PHP 5.4.x Handbuch
PHP und Datenbanken
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:
-
Installieren Sie MySQL wie in der Dokumentation beschrieben auf ihrem
System. Die neueste Version finden Sie auf
» www.mysql.com
Es ist keine spezielle Konfiguration nötig, außer dass
Sie beim Erzeugen einer Datenbank und der Einrichtung des
Benutzeraccounts im Host-Feld ein % oder den Hostnamen des
Windows-Computers, von dem aus Sie zugreifen möchten, eintragen
sollten. Notieren Sie sich den Servernamen, Benutzernamen und das
Passwort.
-
Laden Sie die MyODBC for Windows-Treiber von der MySQL-Seite herunter.
Installieren Sie ihn auf ihrem Windows-Rechner. Sie können
die Funktionsfähigkeit mit den mitgelieferten Programmen testen.
-
Erstellen Sie eine Benutzer- oder System-DSN in den ODBC-Optionen in
der Systemsteuerung. überlegen Sie sich einen DSN-Namen und geben Sie
den Hostnamen, Benutzernamen, Passwort, Port, etc ihrer MySQL-Datenbank
an, die Sie im 1. Schritt konfiguriert haben.
-
Installieren Sie Access als Vollinstallation. Das stellt sicher, dass
Sie die richtigen Add-Ins haben. Zumindest benötigen Sie die
ODBC-Unterstützung und den Linked-Table-Manager.
-
Jetzt zum lustigen Teil! Erstellen Sie eine neue Access-Datenbank.
Rechtsklicken Sie im Tabellenfenster und wählen Sie Link
Tables/Tabellen verknüpfen oder im Menü Datei den Punkt Get
External Data und dann Link Tables/Tabellen verknüpfen. Wenn das
Dateibrowser-Fenster erscheint, wählen Sie Dateien vom Typ: ODBC.
Wählen Sie System-DSN und den Namen der DSN, die Sie in Schritt 3
erstellt haben. Wählen sie die zu verknüpfende Tabelle, klicken Sie
auf OK und Sie können jetzt die Tabelle öffnen und Daten auf Ihrem
MySQL-Server hinzufügen/löschen/ändern. Sie können auch Abfragen
erzeugen, Tabellen importieren und exportieren und Formulare und
Reports generieren, etc.
Tipps und Tricks:
-
Sie können Ihre Tabellen in Access erstellen und nach MySQL
exportieren und Sie dann wieder verknüpfen. Das erleichtert
das Erstellen von Tabellen.
-
Wenn Sie Tabellen in Access erstellen, müssen Sie einen Primärschlüssel
definieren, wenn Sie über Access Schreibzugriff haben wollen.
Vergewissern Sie sich, dass sie einen Primärschlüssel in MySQL
erzeugen, bevor Sie die Tabelle in Access verknüpfen.
-
Wenn Sie ein Tabelle in MySQL ändern, müssen Sie sie in Access neu
verknüpfen. Rufen Sie Tools>add-ins>linked table manager auf,
suchen Sie ihre ODBC-DSN, und wählen Sie die Tabelle aus, die neu
verknüpft werden soll. Sie können Ihre DSN-Quelle auch verschieben,
wenn Sie die "always prompt for new location"-Checkbox ankreuzen,
bevor Sie OK klicken.
-
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 libmysqlclient-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()); ?>
Anmerkungen zum PHP Handbuch
|
Neue Anmerkung schreiben
|
|