Mysql
 sql >> Base de données >  >> RDS >> Mysql

Attention :mysql_query() :l'argument fourni n'est pas une ressource MySQL-Link valide

D'après les commentaires, il semble que le problème soit causé par l'utilisation de require_once() à l'intérieur d'une fonction.

Il se passe une chose sur deux. Soit :

  1. Vous avez déjà inclus Connection.php ailleurs, donc quand vous arrivez à la fonction, elle n'est pas réellement incluse .. à cause de la une fois partie de require_once .

    ou...

  2. C'est est fonctionne la première fois que vous appelez la fonction, mais la deuxième fois que vous l'appelez, le fichier a déjà été inclus et n'est plus inclus.

Le problème est que lorsque le fichier est inclus pour la première fois (en supposant que cela provienne de cette fonction), le $connection La variable est créée dans la portée de la fonction et, comme toute autre variable de fonction, disparaît à la fin de la fonction. Lorsque vous appelez la fonction une deuxième fois, l'inclusion ne se produit pas car vous utilisez require_once .

Vous pourriez probablement résoudre ce problème en appelant require() au lieu de require_once() , mais cela finira par se reconnecter à la base de données chaque fois que vous appelez la fonction - ce qui représente une surcharge inutile. Il est beaucoup plus simple de simplement déplacer l'inclusion en dehors de la fonction et de passer la connexion dans la fonction ou de l'utiliser comme variable globale.

Cela ressemblerait à ceci :

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

Cela étant dit, il y a 2 problèmes majeurs avec ce code.

  1. Vous utilisez le mysql_* fonctions obsolètes et qui seront bientôt supprimées des nouvelles versions de PHP. Voir cette question pour plus de détails :Pourquoi ne devrait-il pas 'est-ce que j'utilise les fonctions mysql_* en PHP ?

    Il n'est en fait pas si difficile de passer à quelque chose comme mysqli_* fonctions à la place - il existe un ensemble de fonctions non-objet qui sont presque identiques à ce que vous utilisez actuellement.

  2. Vous incluez une variable dans votre requête sans l'échapper correctement. À tout le moins, vous devriez appeler mysql_real_escape_string() (ou mysqli_real_escape_string() ), mais une meilleure solution consiste à examiner les instructions préparées. Vous pouvez trouver plus d'informations sur les instructions préparées ici :Comment puis-je empêcher l'injection SQL dans PHP ?