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

Avvertenza:mysql_query():l'argomento fornito non è una risorsa MySQL-Link valida

In base ai commenti, sembra che il problema sia causato dall'utilizzo di require_once() all'interno di una funzione.

Una delle due cose sta accadendo. O:

  1. Hai già incluso Connection.php da qualche altra parte, quindi quando arrivi alla funzione, in realtà non è inclusa.. a causa di una volta parte di require_once .

    oppure...

  2. è funzionando la prima volta che chiami la funzione, ma la seconda volta che la chiami, il file è già stato incluso e non viene più incluso.

Il problema è che quando il file viene incluso per la prima volta (supponendo che provenga da questa funzione), il $connection viene creata nell'ambito della funzione e, come qualsiasi altra variabile di funzione, scompare alla fine della funzione. Quando chiami la funzione una seconda volta, l'inclusione non si verifica perché stai utilizzando require_once .

Probabilmente potresti risolverlo chiamando require() invece di require_once() , ma ciò finirà per riconnettersi al database ogni volta che chiami la funzione, il che è un sovraccarico non necessario. È molto più semplice spostare l'inclusione all'esterno della funzione e passare la connessione alla funzione o utilizzarla come variabile globale.

Sarebbe simile a questo:

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());
} 

Detto questo, ci sono 2 problemi principali con questo codice.

  1. Stai usando mysql_* funzioni che sono deprecate e saranno presto rimosse dalle nuove versioni di PHP. Vedi questa domanda per maggiori dettagli:Perché dovrebben non uso le funzioni mysql_* in PHP?

    In realtà non è così difficile passare a qualcosa come mysqli_* functions invece - c'è un insieme di funzioni non oggetto che sono quasi identiche a quelle che stai usando ora.

  2. Stai includendo una variabile nella tua query senza eseguirne correttamente l'escape. Per lo meno dovresti chiamare mysql_real_escape_string() (o mysqli_real_escape_string() ), ma una soluzione migliore consiste nell'esaminare le dichiarazioni preparate. Puoi trovare maggiori informazioni sulle istruzioni preparate qui:Come posso prevenire l'SQL injection in PHP?