PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Installation> <PHP beziehen
Last updated: Fri, 10 Oct 2008

view this page in

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.

  1. Ich habe gehört, dass es möglich ist, den Microsoft SQL-Server aus PHP anzusprechen. Wie?
  2. Kann ich auf Microsoft Access-Datenbanken zugreifen?
  3. 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?
  4. 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?
  5. 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>"?

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 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());
?>



Installation> <PHP beziehen
Last updated: Fri, 10 Oct 2008
 
add a note add a note User Contributed Notes
PHP und Datenbanken
kalle dot kipina at gmail dot com
09-Aug-2007 01:06
As reply to the entry from 20-Mar-2005 01:19:

The trick seems to be to insert the php directory into your path before any of the other libmysql.dll locations.
cantelow at csd dot net
30-Aug-2006 06:48
On Tru64 5.1A, we had what looked like the mysql pthread problem, with php 5 shared lib compiling fine but crashing upon firing up apache.  But, our problem turned out to be this: we were running 2 versions of mysql and attempting to use --with-mysql=/usr/local/newmysql5 to link to our running test mysql5 distribution.  php was still linking against an old /usr/local/lib/mysql mysqlclient library, however (or setting up to use old /usr/local/lib/mysql shared mysqlclient.so, not sure which).

When we made sure that only /usr/local/newmysql5/lib/mysql/ mysqlclient library (which was a static one in our case) was available to our compiling user, our problem with php crashing on apache start went away. (We used tru64's handy setacl command to accomplish this.)  We still have the mysql5 pthread-included compile.
Kaleabtesfaye at hotmail dot com
13-Apr-2006 08:56
If Some1 is intersted on PHP with MS Access
here is some code
<?php

$db
= 'C:\\Program Files\\Microsoft Office\\Office\\Samples\\Northwind.mdb';

$conn = new COM('ADODB.Connection') //or exit('Cannot start ADO.');

// Two ways to connect. Choose one.
$conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$db") or exit('Cannot open with Jet.');
//$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db") //or exit('Cannot open with driver.');

$sql = 'SELECT   Table Field1,feild2...
    FROM     db
    ORDER BY Field'
;
$rs = $conn->Execute($sql);

?>

Enjoy
Addis Ababa,
Ethiopia
jstoner at NOSPAM dot opsource dot net
01-Mar-2006 09:56
Building in a Redhat 4 64-bit environment:

This assumes you're using Redhat's RPMs (mysql, mysql-devel).

MySQL libraries get installed in /usr/lib64 but PHP only searches /usr/lib. This means your config will fail. You need to create a fake install of MySQL in another directory to get PHP to build correctly.

Create another directory, say /usr/local/mysql. Then cd into that directory and create 2 symbolic links pointing to the appropriate include directory and lib directory:

# mkdir /usr/local/mysql
# cd /usr/local/mysql
# ln -s /usr/include/mysql include
# ln -s /usr/lib64/mysql lib

Now, you should be able to configure PHP with "--with-mysql=/usr/local/mysql" and build properly.
James Coburn
01-Feb-2006 01:31
An easy way to compile PHP5 when you have installed mysql, but
- you can't find the "mysql header files" or
- get this error: Cannot find MySQL header files under /usr/

: simply install mysql-devel from mysql site.
plandis98 at yahoo dot com
18-Dec-2005 06:46
If one is using PHP on Windows to connection to MS SQL Server and does not want to pass credentials via the mssql_connect but instead use MS Connectionless NT Authentication, what is the proper syntax/usage? 

I believe you want to turn on secure_connection in php.ini file:
; Use NT authentication when connecting to the server
mssql.secure_connection = On
djlopez at gmx dot de
08-Sep-2005 01:51
How to compile PHP5 when you have installed mysql, but
- you can't find the "mysql header files" or
- get this error: Cannot find MySQL header files under /usr/

If you want to use mysql 4.0 (*not* 4.1 or even higher!) just download & extract the latest mysql4.0 binary distribution to e.g.
/root/mysql40/

but don't start it (it even should not work, if you have a mysql server already running)

Then use --with-mysql=/root/mysql4 within your php5 configuration.

After compiling/installing (make, make install), you may delete the /root/mysql40/ directory, or keep it for later versions of php5.
20-Mar-2005 09:19
Just a quick note which may help Windows users setting up PHP/Apache/MySQL.  I was receiving these two error messages on Apache startup: 1) "The procedure entry point mysql_thread_end could not be located in the dynamic link library LIBMYSQL.dll" and 2) "PHP Startup: Unable to load dynamic library '<my php installation dir>/ext/php_mysql.dll' - The specified procedure could not be found".  After checking that libmysql.dll did exist in my root PHP install dir, and that this dir was in my path, I determined that the problem was an older version of libmysql.dll.  My solution was to search all harddrives for this file (I found 6 copies of 5 different versions), and rename all of them except my PHP install dir copy.  PHP, Apache and MySQL all function as expected after making this change.
knb at gfz-potsdam dot de
11-Oct-2004 10:53
This is a crucial piece of information for SYBASE users:

If you are using the free, but old, 11.x client libs from sybase,
 then compile with option  "--with-sybase-ct=$SYBASE"
substitute $SYBASE with the appropriate directory name.

option --with-sybase (without ct) can somehow be used to talk to old MS-SQL servers, but only with the 11.x client libs.

If you are using free, or have legally obtained, 12.x client libs from sybase, then compile with option  "--with-sybase-ct=$SYBASE/$SYBASE_OCS"
substitute $SYBASE/$SYBASE_OCS with the appropriate directory name.
Simon
05-Nov-2003 12:38
You can connect to Microsoft SQL Server from PHP without using ODBC. It's even detailed in the PHP docs! Wow! You can find the details at http://www.php.net/manual/en/ref.mssql.php
jastern at uci dot edu
26-Sep-2002 10:24
i made some notes of trials/tribulations setting up PHP (on a linux redhat 7.3 box) to connect (via interbase/ODBC client libraries) to an interbase server on another machine:

http://www.faqts.com/knowledge_base/view.phtml/aid/18951/fid/679

hope it helps someone..
michal at tuxy dot org
27-Feb-2002 07:22
You can approch problem with mysql and pthread by recompiling/linking apache (1.3.2x) with pthread library instead of removing pthread from mysql. This solved my problem with apache dumping core with php (3.0.18 and php 4.1.1) and mysql.
You can use ldd to check if apache is compiled with pthreads.
Hope that helps.

Installation> <PHP beziehen
Last updated: Fri, 10 Oct 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites