Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warnung:mysql_query():3 ist keine gültige MySQL-Link-Ressource

PHP verwendet Ressourcen als spezielle Variable, um Links zu externen Objekten wie Dateien und Datenbankverbindungen zu halten. Jede Ressource erhält eine ganzzahlige ID. (Dokumentation )

Fehlgeschlagene Verbindungen

Wenn die Datenbankverbindung fehlschlägt, erhalten Sie wahrscheinlich den Fehler "Angegebene Variable ist keine gültige MySQL-Link-Ressource", wie Dan Breen erwähnt hat, da die Variable, die die Ressource enthalten soll, null ist.

$link = mysql_connect('localsoth','baduser','badpass'); // failed connection
$result = mysql_query("SELECT 1", $link); // throws error

Da Sie in der Fehlermeldung eine bestimmte Ressourcen-ID erhalten, wurde die Datenbankverbindung wahrscheinlich aus irgendeinem Grund unerwartet geschlossen. Ihr Programm hat immer noch eine Variable mit einer Ressourcen-ID, aber das externe Objekt existiert nicht mehr. Dies kann auf ein mysql_close() zurückzuführen sein Aufruf irgendwo vor dem Aufruf von mysql_query , oder ein externer Datenbankfehler, der die Verbindung beendet hat.

$link = mysql_connect();
mysql_close($link);
// $link may still contain a resource identifier, but the external object is gone
mysql_query("SELECT 1", $link);

Verbindungen wiederverwenden

Ein Problem mit der mysql-Erweiterung und mysql_connect() Wenn Sie dieselben Parameter in aufeinanderfolgenden Aufrufen übergeben, wird standardmäßig die vorhandene Verbindung wiederverwendet, anstatt eine neue zu erstellen (Dokumentation ). Dies kann behoben werden, indem true übergeben wird zum $new_link Parameter.
Ich bin selbst auf einem Testsystem darauf gestoßen, wo die Daten von zwei separaten Datenbanken in der Produktion auf einem Testserver kombiniert wurden, und beim Testen von mysql_xxx() Funktionsaufrufe gingen übereinander und machten das System kaputt.

$link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
$link2 = mysql_connect('localhost','user','pass'); // resource id 1 is given again
mysql_close($link2); // the connection at resource id 1 is closed
mysql_query("SELECT 1", $link1); // will fail, since the connection was closed

Verwenden von $new_link :

$link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
$link2 = mysql_connect('localhost','user','pass', true); // resource id 2 is given
mysql_close($link2); // the connection at resource id 2 is closed
mysql_query("SELECT 1", $link1); // the connection at resource id 1 is still open

Bearbeiten:
Nebenbei würde ich empfehlen, MySQLi Erweiterung oder PDO stattdessen ggf. Die MySQL-Erweiterung wird ziemlich alt und kann keine Funktionen nach MySQL-Version 4.1.3 nutzen. Sehen Sie sich http://www.php.net/manual/en/mysqli an .overview.php für einige Details zu den Unterschieden zwischen den drei Schnittstellen.