2010-04-23 13 views
9

Olası Çoğalt:
“Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given” error while trying to create a php shopping cartmysql_fetch_array() parametresi 1 kaynak sorunu olmasını bekler

Ben bu kodda hiç hata görüyoruz ama bu hata var, alamadım lütfen yardım:
mysql_fetch_array() parametresi 1 kaynak sorunu olmasını bekler

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

Sadece verileri formlara yüklemeye çalışıyorum ama neden bu hatanın göründüğünü bilmiyorum. Buradaki hata ne olabilir?

+1

Ben en azından döküm '$ _GET int'' etmek [ 'id'] 'tavsiye ederim .. bu umarım bu işe düşünüyorum

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

dene SELECT * FROM öğrencisi WHERE IDNO = ". (Int) $ _ GET ['id']);' – binaryLV

cevap

23

Sen mysql_query çağrısının ardından kontrol hata yapmıyor: durumunda mysql_query yılında

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

, başarısız o false bir boolean değer döndürür. Bunu mysql_fetch_array işlevine ilettiğinizde (mysql result object) bu hatayı aldık.

0

Sorgunun başarılı bir şekilde çalıştığından ve sonuçları aldığından emin olun. Böyle denetleyebilirsiniz:

$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

en olası nedeni mysql_query() bir hatadır. Çalıştığından emin olmak için kontrol ettiniz mi? $result ve mysql_error() değerini çıkış.

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

$_GET['id']gerçekten önemlidir Sanitising: Sen vs Yani, bir izin sorununu, yanlış veritabanını seçilen, bir şeyler yanlış yazılmış olabilir. mysql_real_escape_string()'u kullanabilir, ancak bir int'a çevirme tam sayı için yeterlidir. Temelde SQL enjeksiyonundan kaçınmak istiyorsunuz.

0

Veritabanınızda "IDNO" türü nedir? Burada sql kaçmak gerekebilir:

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

hep böyle yapmak ve bu kullanıyorsunuz

0

sorunun ne söyleyecektir:

mysql_fetch_array($result) 

almak için Aldığınız hata, $result'un bir kaynak olmadığı anlamına gelir. Kodunuzda


, $result bu şekilde elde edilir:

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

SQL sorgusu başarısız olursa

, $result bir kaynak olmayacak, ancak bir boolean - mysql_query bakın.

Ben SQL sorgusu bir hata var herhalde - yani mysql_query bir boolean değil, bir kaynak verir, başarısız ve mysql_fetch_array bu konuda çalışamaz. - Bu rakamı yardımcı olması gerektiğine ile

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

sorgunuzu yürütülürken oluştu hatayı belirten bir mesaj almalısınız: SQL sorgusu bir sonuç ya da değil döndürürse


kontrol etmelisiniz sorun ne ;-)


Ayrıca, SQL sorgunuzu koyduğunuz veriden de kaçmalısınız, SQL injections'u önlemek için!

Örneğin, burada, böyle bir şey kullanarak, $_GET['id'] bir tamsayı daha başka bir şey içerdiğinden emin olun olmalıdır:

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

Yoksa güzel görüntülemek için sorguyu yürütmek denemeden önce bu kontrol etmelisiniz kullanıcıya hata mesajı. " ` mysql_query (:

İlgili konular