sql >> Database >  >> RDS >> Mysql

Waarschuwing:mysql_query():3 is geen geldige MySQL-Link-bron

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 extensie of BOB in plaats daarvan, indien mogelijk. De MySQL-extensie wordt behoorlijk oud en kan niet profiteren van functies na MySQL-versie 4.1.3. Kijk op http://www.php.net/manual/en/mysqli .overzicht.php voor wat details over de verschillen tussen de drie interfaces.



  1. 4 manieren om een ​​lijst met schema's te krijgen in SQL Server Agent (T-SQL)

  2. 6 manieren om dubbele rijen met een primaire sleutel in Oracle te verwijderen

  3. Hoe SQL Server-database migreren naar MySQL?

  4. Databasemodel voor het reserveringssysteem van een rijschool. Deel 1