Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warnung:mysql_query():Das angegebene Argument ist keine gültige MySQL-Link-Ressource

Basierend auf den Kommentaren klingt es so, als ob das Problem durch die Verwendung von require_once() verursacht wird innerhalb einer Funktion.

Eines von zwei Dingen passiert. Entweder:

  1. Sie haben Connection.php bereits eingebunden woanders, also wenn Sie zu der Funktion kommen, ist sie nicht wirklich enthalten ... wegen der Einmal Teil von require_once .

    oder...

  2. Es ist funktioniert beim ersten Aufruf der Funktion, aber beim zweiten Aufruf ist die Datei bereits inkludiert und wird nicht noch einmal inkludiert.

Das Problem besteht darin, dass beim erstmaligen Einbinden der Datei (vorausgesetzt, dies erfolgt innerhalb dieser Funktion) die $connection Die Variable wird im Funktionsbereich erstellt und ist wie jede andere Funktionsvariable am Ende der Funktion verschwunden. Wenn Sie die Funktion ein zweites Mal aufrufen, findet das Einschließen nicht statt, weil Sie require_once verwenden .

Sie könnten dies wahrscheinlich beheben, indem Sie require() aufrufen statt require_once() , aber das wird jedes Mal, wenn Sie die Funktion aufrufen, eine erneute Verbindung zur Datenbank herstellen - was viel unnötigen Overhead bedeutet. Es ist viel sauberer, das Include einfach außerhalb der Funktion zu verschieben und die Verbindung entweder in die Funktion zu übergeben oder sie als globale Variable zu verwenden.

Das würde so aussehen:

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

Abgesehen davon gibt es zwei Hauptprobleme mit diesem Code.

  1. Sie verwenden den mysql_* Funktionen, die veraltet sind und bald aus neuen PHP-Versionen entfernt werden. Siehe diese Frage für weitere Details:Why shouldn verwende ich nicht mysql_*-Funktionen in PHP?

    Es ist eigentlich gar nicht so schwer, auf so etwas wie mysqli_* umzusteigen Funktionen stattdessen - es gibt einen Nicht-Objekt-Satz von Funktionen, die fast identisch mit dem sind, was Sie jetzt verwenden.

  2. Sie schließen eine Variable in Ihre Abfrage ein, ohne sie ordnungsgemäß zu maskieren. Zumindest sollten Sie mysql_real_escape_string() aufrufen (oder mysqli_real_escape_string() ), aber eine bessere Lösung besteht darin, sich vorbereitete Anweisungen anzusehen. Weitere Informationen zu vorbereiteten Anweisungen finden Sie hier:Wie kann ich SQL-Injection in PHP verhindern?