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

Advarsel:mysql_query():det leverede argument er ikke en gyldig MySQL-Link-ressource

Baseret på kommentarerne lyder det til, at problemet er forårsaget af brug af require_once() inde i en funktion.

En af to ting sker. Enten:

  1. Du har allerede inkluderet Connection.php et andet sted, så når du kommer til funktionen, er den faktisk ikke inkluderet.. på grund af en gang del af require_once .

    eller...

  2. Det er fungerer første gang du kalder funktionen, men anden gang du kalder den, er filen allerede inkluderet og bliver ikke inkluderet igen.

Problemet er, at når filen først inkluderes (forudsat at det er fra denne funktion), er $connection variabel oprettes i funktionsomfanget, og er ligesom enhver anden funktionsvariabel væk i slutningen af ​​funktionen. Når du kalder funktionen en anden gang, sker inkluderingen ikke, fordi du bruger require_once .

Du kan sikkert løse dette ved at kalde require() i stedet for require_once() , men det ender med at oprette forbindelse til databasen igen, hver gang du kalder funktionen - hvilket er en masse unødvendige overhead. Det er meget renere blot at flytte include uden for funktionen og enten overføre forbindelsen til funktionen eller bruge den som en global variabel.

Det ville se sådan ud:

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

Når det er sagt, er der 2 store problemer med denne kode.

  1. Du bruger mysql_* funktioner, som er forældet og snart vil blive fjernet fra nye versioner af PHP. Se dette spørgsmål for flere detaljer:Hvorfor burde Bruger jeg ikke mysql_*-funktioner i PHP?

    Det er faktisk ikke så svært at skifte til noget som mysqli_* funktioner i stedet - der er et ikke-objekt sæt funktioner, der er næsten identiske med det, du bruger nu.

  2. Du inkluderer en variabel i din forespørgsel uden at undslippe den korrekt. Du bør i det mindste kalde mysql_real_escape_string() (eller mysqli_real_escape_string() ), men en bedre løsning er at se på udarbejdede erklæringer. Du kan finde mere information om udarbejdede erklæringer her:Hvordan kan jeg forhindre SQL-injektion i PHP?




  1. Tilføj kun data til SQLite-databasen én gang og læs flere gange

  2. Kan ikke oprette forbindelse til lokal MySQL-server via socket '/tmp/mysql.sock

  3. Online migrering fra MySQL 5.6 Non-GTID til MySQL 5.7 med GTID

  4. Matching af udbud og efterspørgsel — løsninger, del 2