sql >> Database teknologi >  >> RDS >> Mysql

Advarsel:mysql_query():3 er ikke en gyldig MySQL-Link-ressource

PHP bruger ressourcer som en speciel variabel til at holde links til eksterne objekter, såsom filer og databaseforbindelser. Hver ressource får et heltals-id. (Dokumentation )

Mislykkede forbindelser

Hvis databaseforbindelsen mislykkes, vil du sandsynligvis få fejlen "Specificeret variabel er ikke en gyldig MySQL-Link-ressource", som Dan Breen nævnte, da den variabel, der formodes at indeholde ressourcen, er null.

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

Da du får et specifikt ressource-id i fejlmeddelelsen, lukkede databaseforbindelsen sandsynligvis uventet af en eller anden grund. Dit program har stadig en variabel med et ressource-id, men det eksterne objekt eksisterer ikke længere. Dette kan skyldes en mysql_close() ring et sted før opkaldet til mysql_query , eller en ekstern databasefejl, der lukkede forbindelsen.

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

Genbrug af forbindelser

Et problem med mysql-udvidelsen og mysql_connect() er, at hvis du sender de samme parametre i successive opkald, vil den som standard genbruge den eksisterende forbindelse i stedet for at oprette en ny (Dokumentation ). Dette kan rettes ved at sende true til $new_link parameter.
Jeg stødte på dette selv på et testsystem, hvor data fra to separate databaser i produktionen blev kombineret på én testserver, og ved test af mysql_xxx() funktionsopkald gik hen over hinanden og brød systemet.

$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

Bruger $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

Edit:
Som en sidebemærkning vil jeg anbefale at bruge MySQLi udvidelse eller PDO i stedet, hvis det er muligt. MySQL-udvidelsen er ved at blive temmelig gammel og kan ikke drage fordel af nogen funktioner tidligere MySQL version 4.1.3. Se på http://www.php.net/manual/en/mysqli .overview.php for nogle detaljer om forskellene mellem de tre grænseflader.



  1. Hold orden fra 'IN'-klausulen

  2. kommasepareret streng af udvalgte værdier i mysql

  3. Hvad betyder det at bruge parenteser med en OR i SQL?

  4. Sådan opdateres Array i PostgreSQL