2010-04-23 9 views
9

Mögliche Duplizieren zu sein:
“Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given” error while trying to create a php shopping cartmysql_fetch_array() erwartet Parameter 1 Ressourcenproblem

Ich verstehe es nicht, ich sehe keine Fehler in diesem Code, aber es ist dieser Fehler , bitte helfen:
mysql_fetch_array() erwartet Parameter 1 Ressourcenproblem

<?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 } ?> 
zu sein

Ich versuche nur, die Daten in den Formularen zu laden, aber ich weiß nicht, warum dieser Fehler auftritt. Was könnte hier der Fehler sein?

+1

Ich würde zumindest Besetzung 'empfehlen $ _GET [ 'id']' auf 'int': ' mysql_query (“ SELECT * FROM Schüler WHERE IDNO = ". (Int) $ _ GET ['id']);' – binaryLV

Antwort

23

Sie sind nicht Fehler tun nach dem Aufruf mysql_query Überprüfung:

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

Bei mysql_query versagt, gibt sie false, ein boolean Wert. Wenn Sie dies an mysql_fetch_array Funktion übergeben (die eine mysql result object erwartet) erhalten wir diesen Fehler.

0

Stellen Sie sicher, dass Ihre Abfrage erfolgreich ausgeführt wurde und Sie die Ergebnisse erhalten haben. Sie können wie folgt überprüfen:

$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

Die wahrscheinlichste Ursache ist ein Fehler in mysql_query(). Hast du überprüft, ob es funktioniert? Geben Sie den Wert $result und mysql_error() aus. Sie können etwas falsch geschrieben haben, die falsche Datenbank ausgewählt, ein Berechtigungsproblem haben, etc. Also:

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

Sanitizing $_GET['id']wirklich wichtig ist. Sie können mysql_real_escape_string() verwenden, aber es ist für Ganzzahlen ausreichend, es auf ein int zu werfen. Grundsätzlich möchten Sie SQL-Injection vermeiden.

0

In Ihrer Datenbank was ist der Typ von "IDNO"? Sie können die SQL hier entkommen müssen:

$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); 

immer es auf diese Weise tun, und es wird Ihnen sagen, was falsch ist

0

Sie diese verwenden:

mysql_fetch_array($result) 

Um Der Fehler, den Sie bekommen, bedeutet, dass $result keine Ressource ist.


In Ihrem Code wird $result auf diese Weise erhalten:

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

Wenn die SQL-Abfrage fehlschlägt, $result wird keine Ressource, sondern ein boolean sein - mysql_query sehen.

Ich nehme an, es ist ein Fehler in der SQL-Abfrage - so es fehlschlägt, mysql_query eine boolean zurückgibt und keine Ressource, und mysql_fetch_array können sich nicht.


sollten Sie überprüfen, ob die SQL-Abfrage ein Ergebnis oder nicht zurückgibt:

$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 ! 
} 

Damit sollten Sie eine Meldung erhalten, das den Fehler anzeigt, die während der Ausführung Ihrer Anfrage aufgetreten - dies sollte dazu beitragen, Figur heraus, was das Problem ist ;-)


Sie sollten auch die Daten entkommen, die Sie in Ihre SQL-Abfrage setzen, um SQL injections zu vermeiden!

Zum Beispiel hier, sollten Sie sicherstellen, dass $_GET['id'] enthält nichts anderes als eine ganze Zahl ist, so etwas wie dies mit:

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

Oder Sie sollten dies überprüfen, bevor Sie versuchen, die Abfrage auszuführen, ein schöneres anzuzeigen Fehlermeldung an den Benutzer.

2

Geben Sie dies versuchen, ein

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

Ich denke, das funktioniert ..

Verwandte Themen