sql >> Database >  >> RDS >> Mysql

Waarschuwing:mysql_query():opgegeven argument is geen geldige MySQL-Link-bron

Op basis van de opmerkingen klinkt het alsof het probleem wordt veroorzaakt door het gebruik van require_once() binnen een functie.

Een van de twee dingen gebeurt. Ofwel:

  1. Je hebt Connection.php al opgenomen ergens anders, dus als je bij de functie komt, is deze niet echt opgenomen.. vanwege de eenmalige onderdeel van require_once .

    of...

  2. Het is werkt de eerste keer dat u de functie aanroept, maar de tweede keer dat u deze aanroept, is het bestand al opgenomen en wordt het niet opnieuw opgenomen.

Het probleem is dat wanneer het bestand voor het eerst wordt opgenomen (ervan uitgaande dat dit van binnen deze functie is), de $connection variabele wordt gemaakt in het functiebereik en is, net als elke andere functievariabele, aan het einde van de functie verdwenen. Wanneer u de functie een tweede keer aanroept, vindt de include niet plaats omdat u require_once gebruikt .

U kunt dit waarschijnlijk oplossen door require() . aan te roepen in plaats van require_once() , maar dat zal uiteindelijk elke keer dat u de functie aanroept opnieuw verbinding maken met de database - wat veel onnodige overhead is. Het is veel schoner om de include buiten de functie te plaatsen en ofwel de verbinding door te geven aan de functie, of het als een globale variabele te gebruiken.

Dat zou er zo uitzien:

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

Dat gezegd hebbende, er zijn 2 grote problemen met deze code.

  1. Je gebruikt de mysql_* functies die verouderd zijn en binnenkort zullen worden verwijderd uit nieuwe versies van PHP. Zie deze vraag voor meer details:Waarom zou gebruik ik geen mysql_*-functies in PHP?

    Het is eigenlijk niet zo moeilijk om over te schakelen naar iets als de mysqli_* functies in plaats daarvan - er is een niet-object set functies die bijna identiek zijn aan wat u nu gebruikt.

  2. U neemt een variabele op in uw query zonder deze op de juiste manier te escapen. Je zou op zijn minst mysql_real_escape_string() . moeten aanroepen (of mysqli_real_escape_string() ), maar een betere oplossing is om voorbereide verklaringen te bekijken. U kunt hier meer informatie over voorbereide verklaringen vinden:Hoe kan ik SQL-injectie in PHP voorkomen?




  1. CodeIgniter:een afbeelding opslaan in de database?

  2. geef parameters door in de procedure voor het invoegen van query's in laravel 4

  3. python pip install psycopg2 installatiefout

  4. 2 functies die de dag, de maand en het jaar uit een datum halen in Oracle