sql >> Base de Datos >  >> RDS >> Mysql

Advertencia:mysql_query():3 no es un recurso MySQL-Link válido

PHP usa recursos como una variable especial para mantener enlaces a objetos externos, como archivos y conexiones a bases de datos. A cada recurso se le asigna un id entero. (Documentación )

Conexiones fallidas

Si falla la conexión a la base de datos, es probable que obtenga el error "La variable especificada no es un recurso válido de MySQL-Link", como mencionó Dan Breen, ya que la variable que se supone que contiene el recurso es nula.

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

Dado que obtiene un ID de recurso específico en el mensaje de error, es probable que la conexión de la base de datos se haya cerrado inesperadamente por algún motivo. Su programa aún tiene una variable con un ID de recurso, pero el objeto externo ya no existe. Este puede ser debido a un mysql_close() llamar a algún lugar antes de la llamada a mysql_query , o un error de base de datos externa que cerró la conexión.

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

Reutilización de conexiones

Un problema con la extensión mysql y mysql_connect() es que por defecto si pasa los mismos parámetros en llamadas sucesivas, reutilizará la conexión existente en lugar de crear una nueva (Documentación ). Esto se puede arreglar pasando true al $new_link parámetro.
Me encontré con esto en un sistema de prueba donde los datos de dos bases de datos separadas en producción se combinaron en un servidor de prueba, y al probar el mysql_xxx() las llamadas de función se cruzaron unas con otras y rompieron el sistema.

$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

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

Editar:
Aparte, recomendaría usar MySQLi extensión o PDO en su lugar, si es posible. La extensión de MySQL se está volviendo bastante antigua y no puede aprovechar ninguna característica anterior a la versión 4.1.3 de MySQL. Mire http://www.php.net/manual/en/mysqli .resumen.php para obtener algunos detalles sobre las diferencias entre las tres interfaces.