web-dev-qa-db-fra.com

mysql_fetch_array () s'attend à ce que le paramètre 1 soit un problème de ressources

Dupliquer possible:
"Attention: mysql_fetch_array () s'attend à ce que le paramètre 1 soit ressource, booléen étant donné" erreur en essayant de créer un panier php

Je ne comprends pas, je ne vois aucune erreur dans ce code mais il y a cette erreur, aidez s'il vous plaît:
mysql_fetch_array () s'attend à ce que le paramètre 1 soit un problème de ressource

<?php

      $con = mysql_connect("localhost","root","nitoryolai123$%^");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

    mysql_select_db("school", $con);
       $result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']);
    ?>     


                           <?php while ($row = mysql_fetch_array($result)) { ?>             
                                     <table class="a"  border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#D3D3D3">
    <tr>

    <form name="formcheck" method="get" action="updateact.php" onsubmit="return formCheck(this);">
    <td>
    <table  border="0" cellpadding="3" cellspacing="1" bgcolor="">
    <tr>

    <td  colspan="16" height="25"  style="background:#5C915C; color:white; border:white 1px solid; text-align: left"><strong><font size="2">Update Students</td>


    <tr>
    <td width="30" height="35"><font size="2">*I D Number:</td>
    <td width="30"><input  name="idnum" onkeypress="return isNumberKey(event)" type="text" maxlength="5" id='numbers'/ value="<?php echo $_GET['id']; ?>"></td>
    </tr>

    <tr>
    <td width="30" height="35"><font size="2">*Year:</td>
    <td width="30"><input  name="yr" onkeypress="return isNumberKey(event)" type="text" maxlength="5" id='numbers'/ value="<?php echo $row["YEAR"]; ?>"></td>

<?php } ?>

J'essaie simplement de charger les données dans les formulaires mais je ne sais pas pourquoi cette erreur apparaît. Quelle pourrait être l'erreur ici?

9
user225269

Vous ne faites pas error check après l'appel à mysql_query :

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']);
if (!$result) { // add this check.
    die('Invalid query: ' . mysql_error());
}

Si mysql_query échoue, il retourne false, une valeur boolean. Lorsque vous passez ceci à la fonction mysql_fetch_array (qui attend un mysql result object), nous obtenons cette erreur.

23
codaddict
$id = intval($_GET['id']);
$sql = "SELECT * FROM student WHERE IDNO=$id";
$result = mysql_query($sql) or trigger_error(mysql_error().$sql);

toujours le faire de cette façon et il vous dira ce qui ne va pas

2
Your Common Sense

Essayez ceci

$indo=$_GET['id'];
$result = mysql_query("SELECT * FROM student WHERE IDNO='$indo'");

Je pense que ça marche ..

2
yapiyapi

Assurez-vous que votre requête a été exécutée avec succès et que vous avez obtenu les résultats. Vous pouvez vérifier comme ceci:

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']) or die(mysql_error());


if (is_resource($result))
{
   // your while loop and fetch array function here....
}
0
Sarfraz

La cause la plus probable est une erreur dans mysql_query(). Avez-vous vérifié pour vous assurer que cela a fonctionné? Afficher la valeur de $result et mysql_error(). Vous avez peut-être mal orthographié quelque chose, sélectionné la mauvaise base de données, rencontré un problème d'autorisations, etc. Ainsi:

$id = (int)$_GET['id']; // this also sanitizes it
$sql = "SELECT * FROM student WHERE idno = $id";
$result = mysql_query($sql);
if (!$result) {
  die("Error running $sql: " . mysql_error());
}

Désinfecter $_GET['id'] est vraiment important. Vous pouvez utiliser mysql_real_escape_string() mais le convertir en int suffit pour les entiers. En gros, vous voulez éviter l'injection SQL.

0
cletus

Dans votre base de données, quel est le type de "IDNO"? Vous devrez peut-être échapper au SQL ici:

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']);
0
zaf

Vous utilisez ceci:

mysql_fetch_array($result)

Pour obtenir l'erreur que vous obtenez, cela signifie que $result n'est pas une ressource.


Dans votre code, $result est obtenu de cette façon:

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']);

Si la requête SQL échoue, $result ne sera pas une ressource mais un booléen - voir mysql_query .

Je suppose qu'il y a une erreur dans votre requête SQL - elle échoue donc, mysql_query renvoie un booléen, et non une ressource, et mysql_fetch_array ne peut pas fonctionner avec cela.


Vous devriez vérifier si la requête SQL renvoie ou non un résultat:

$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']);
if ($result !== false) {
    // use $result
} else {
    // an error has occured
    echo mysql_error();
    die;    // note : echoing the error message and dying 
            // is OK while developping, but not in production !
}

Avec cela, vous devriez recevoir un message indiquant l'erreur survenue lors de l'exécution de votre requête - cela devrait vous aider à comprendre le problème ;-)


De même, vous devriez échapper les données que vous mettez dans votre requête SQL pour éviter injections SQL !

Par exemple, ici, vous devez vous assurer que $_GET['id'] ne contient rien d'autre qu'un entier, en utilisant quelque chose comme ceci:

$result = mysql_query("SELECT * FROM student WHERE IDNO=" . intval($_GET['id']));

Ou vous devriez vérifier ceci avant d'essayer d'exécuter la requête, pour afficher un message d'erreur plus sympathique à l'utilisateur.

0
Pascal MARTIN