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

Advertencia:mysql_query():el argumento proporcionado no es un recurso MySQL-Link válido

Según los comentarios, parece que el problema se debe al uso de require_once() dentro de una función.

Una de dos cosas está sucediendo. O bien:

  1. Ya has incluido Connection.php en otro lugar, así que cuando llegas a la función, en realidad no está incluida... debido a la una vez parte de require_once .

    o...

  2. es funcionando la primera vez que llama a la función, pero la segunda vez que la llama, el archivo ya se ha incluido y no se vuelve a incluir.

El problema es que cuando el archivo se incluye por primera vez (suponiendo que sea dentro de esta función), la $connection La variable se crea en el ámbito de la función y, como cualquier otra variable de función, desaparece al final de la función. Cuando llama a la función por segunda vez, la inclusión no ocurre porque está usando require_once .

Probablemente podría arreglar esto llamando a require() en lugar de require_once() , pero eso terminará volviendo a conectarse a la base de datos cada vez que llame a la función, lo que es una gran cantidad de gastos generales innecesarios. Es mucho más limpio simplemente mover la inclusión fuera de la función y pasar la conexión a la función o usarla como una variable global.

Eso se vería así:

require_once('Connection.php');

function getResult() {
    global $connection;

    $findQuery = "SELECT * FROM `Keys` WHERE `ID` = '$gID'";
    $findResult = mysql_query($findQuery, $connection) or die(mysql_error());
    $resultRow = mysql_fetch_assoc($findResult) or die(mysql_error());
} 

Dicho todo esto, hay 2 problemas importantes con este código.

  1. Estás usando mysql_* funciones que están en desuso y pronto se eliminarán de las nuevas versiones de PHP. Consulte esta pregunta para obtener más detalles:¿Por qué no debería ¿No uso las funciones mysql_* en PHP?

    En realidad, no es tan difícil cambiar a algo como mysqli_* funciones en su lugar:hay un conjunto de funciones que no son objetos que son casi idénticas a las que está usando ahora.

  2. Estás incluyendo una variable en tu consulta sin escaparla correctamente. Como mínimo, debería llamar a mysql_real_escape_string() (o mysqli_real_escape_string() ), pero una mejor solución es buscar declaraciones preparadas. Puede encontrar más información sobre declaraciones preparadas aquí:¿Cómo puedo evitar la inyección SQL en PHP?