mysql_fetch_array () parametre 1 kaynak sorunu olmasını beklediğini [yinelenen]

7 Cevap php

Possible Duplicate:
“Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given” error while trying to create a php shopping cart

I don't get it, I see no mistakes in this code but there is this error, please help:
mysql_fetch_array() expects parameter 1 to be resource problem

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

Ben sadece formlarda veri yüklemek için çalışıyorum ama bu hata görünür neden bilmiyorum. Ne muhtemelen burada hata olabilir?

7 Cevap

Bunu yapmıyor error checking için çağrısından sonra mysql_query:

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

mysql_query başarısız olması durumunda, bu false döner, boolean değer. Eğer mysql_fetch_array işlevi için bu geçirdiğinizde (beklediğini mysql result object) Bu hatayı alıyorum.

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

Her zaman bu şekilde yapmak ve yanlış ne olduğunu size söyleyecektir

Bu bir şans verin

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

Ben bu işleri düşünüyorum ..

En olası nedeni mysql_query() bir hatadır. Emin o amele olmak için kontrol ettiniz mi? Çıktı $result değeri ve mysql_error(). Sen yanlış veritabanını seçilmiş şey, yanlış yazılmış, bir izin sorunu var vs Yani olabilir:

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

Sterilizasyon $_GET['id'] really önemlidir. Sen mysql_real_escape_string() kullanabilirsiniz ama bunu döküm bir int tamsayılar için yeterli olabilir. Temelde SQL enjeksiyon önlemek istiyor.

Sorgu başarıyla koştu ve sonuçları var emin olun. Böyle kontrol edebilirsiniz:

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

Veritabanındaki "KİMLİK NO" türü nedir? Burada sql kaçmak gerekebilir:

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

Bu kullanıyorsunuz:

mysql_fetch_array($result)

Alıyoruz hatayı almak için, $result bir kaynak değildir anlamına gelir.


In your code, $result is obtained this way :

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

If the SQL query fails, $result kaynak olmayacaktır , but a boolean -- see mysql_query .

Ben orada an error in your SQL query varsayalım - bu yüzden, mysql_query, bir boolean değil, bir kaynak verir, ve mysql_fetch_array bu konuda çalışamaz başarısız olur.


You should check if the SQL query returns a result or not :

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

Bunun üzerine, size sorgu yürütülürken oluştu hatayı belirten bir ileti almalısınız - bu sorunun ne şekil yardımcı olmalıdır ;-)


Also, you should escape the data you're putting in your SQL query, to avoid SQL injections !

Örneğin, burada, sen $_GET['id'] Bu gibi bir şey kullanarak, bir tamsayı başka bir şey içerdiğinden emin olun:

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

Ya da kullanıcıya güzel bir hata mesajı görüntülemek için, sorguyu yürütmek için denemeden önce bu kontrol etmelisiniz.