PHP gebruikt bronnen als een speciale variabele om koppelingen naar externe objecten, zoals bestanden en databaseverbindingen, vast te houden. Elke resource krijgt een geheel getal id. (Documentatie )
Mislukte verbindingen
Als de databaseverbinding mislukt, krijgt u waarschijnlijk de foutmelding "Specified variable is not a valid MySQL-Link resource", zoals Dan Breen al zei, omdat de variabele die de resource moet bevatten, null is.
$link = mysql_connect('localsoth','baduser','badpass'); // failed connection
$result = mysql_query("SELECT 1", $link); // throws error
Aangezien u een specifieke resource-ID in het foutbericht krijgt, is de databaseverbinding waarschijnlijk om de een of andere reden onverwacht gesloten. Uw programma heeft nog steeds een variabele met een resource-ID, maar het externe object bestaat niet meer. Dit mag te wijten zijn aan een mysql_close()
bel ergens voor de aanroep naar mysql_query
, of een externe databasefout die de verbinding heeft verbroken.
$link = mysql_connect();
mysql_close($link);
// $link may still contain a resource identifier, but the external object is gone
mysql_query("SELECT 1", $link);
Verbindingen opnieuw gebruiken
Een probleem met de mysql-extensie en mysql_connect()
is dat standaard als u dezelfde parameters doorgeeft in opeenvolgende oproepen, het de bestaande verbinding zal hergebruiken in plaats van een nieuwe te maken (Documentatie
). Dit kan worden opgelost door true
. door te geven naar de $new_link
parameter.
Ik ben dit zelf tegengekomen op een testsysteem waar de gegevens van twee afzonderlijke databases in productie werden gecombineerd op één testserver, en bij het testen van de mysql_xxx()
functieaanroepen liepen over elkaar heen en braken het systeem.
$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
$new_link
gebruiken :
$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
Bewerken:
Terzijde zou ik aanraden om de MySQLi