2010-04-23 2 views
9

Possible en double:
“Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given” error while trying to create a php shopping cartmysql_fetch_array() attend le paramètre 1 pour être problème de ressources

Je ne comprends pas, je ne vois pas d'erreur dans ce code, mais il y a cette erreur , s'il vous plaît aider:
mysql_fetch_array() attend le paramètre 1 pour être problème de ressources

<?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. Qu'est-ce qui pourrait être l'erreur ici?

+1

je recommande au moins 'casting $ _GET [ 'id']' 'à int': ' mysql_query (» SELECT * FROM étudiant WHERE IDNO = ". (Int) $ _ GET ['id'])' – binaryLV

Répondre

23

Vous ne faites pas contrôle d'erreur 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()); 
} 

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

0

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

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

$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ésinfectante $_GET['id'] est vraiment importante. Vous pouvez utiliser mysql_real_escape_string() mais le convertir en int est suffisant pour les entiers. Fondamentalement, vous voulez éviter l'injection SQL.

0

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

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

font toujours de cette façon et il vous dira ce qui est mal

0

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 ya une erreur dans votre requête SQL - il échoue, mysql_query retourne une valeur booléenne, et non une ressource, et mysql_fetch_array ne peut pas travailler.


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

$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 obtenir un message qui indique l'erreur survenue lors de l'exécution de votre requête - ce qui devrait aider à comprendre ce que le problème est ;-)


en outre, vous devez échapper les données que vous mettez dans votre requête SQL, pour éviter SQL injections!

Par exemple, ici, vous devez vous assurer que $_GET['id'] 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 avant d'essayer d'exécuter la requête, pour afficher une plus belle message d'erreur à l'utilisateur.

2

pour cette solution

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

Je pense que cela fonctionne ..

Questions connexes