sql >> Databasteknik >  >> RDS >> Mysql

Varning:mysql_query():det angivna argumentet är inte en giltig MySQL-Link-resurs

Baserat på kommentarerna låter det som att problemet orsakas av att du använder require_once() inuti en funktion.

En av två saker händer. Antingen:

  1. Du har redan inkluderat Connection.php någon annanstans, så när du kommer till funktionen är den faktiskt inte inkluderad.. på grund av en gång del av require_once .

    eller...

  2. Det är fungerar första gången du anropar funktionen, men andra gången du anropar den har filen redan inkluderats och tas inte med igen.

Problemet är att när filen först inkluderas (förutsatt att det kommer från den här funktionen), $connection variabel skapas i funktionsomfånget, och liksom alla andra funktionsvariabler, är den borta i slutet av funktionen. När du anropar funktionen en andra gång händer inte inkluderingen eftersom du använder require_once .

Du kan förmodligen fixa detta genom att anropa require() istället för require_once() , men det kommer att sluta återansluta till databasen varje gång du anropar funktionen - vilket är en hel del onödig overhead. Det är mycket renare att bara flytta inkluderingen utanför funktionen och antingen skicka kopplingen till funktionen eller använda den som en global variabel.

Det skulle se ut så här:

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

Med detta sagt finns det två stora problem med den här koden.

  1. Du använder mysql_* funktioner som är föråldrade och snart kommer att tas bort från nya versioner av PHP. Se den här frågan för mer information:Varför bör Använder jag inte mysql_*-funktioner i PHP?

    Det är faktiskt inte så svårt att byta till något som mysqli_* funktioner istället - det finns en uppsättning funktioner utan objekt som är nästan identiska med det du använder nu.

  2. Du inkluderar en variabel i din fråga utan att undvika den ordentligt. Du bör åtminstone anropa mysql_real_escape_string() (eller mysqli_real_escape_string() ), men en bättre lösning är att titta på förberedda uttalanden. Du kan hitta mer information om förberedda uttalanden här:Hur kan jag förhindra SQL-injektion i PHP?




  1. Hur man exporterar SQL Server-data från tabell till en CSV-fil

  2. Hur man optimerar webbplatsdatabasen

  3. Hur fungerar det att hämta data från SQL Server till SqlDataReader?

  4. Fel vid inställning av n_distinct med en plpgsql-variabel