2010-04-23 35 views
9

thể trùng lặp:
“Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given” error while trying to create a php shopping cartmysql_fetch_array() dự kiến ​​tham số 1 là vấn đề tài nguyên

Tôi không nhận được nó, tôi thấy không có sai lầm trong mã này nhưng có lỗi này , xin vui lòng giúp đỡ:
mysql_fetch_array() hy vọng tham số 1 là vấn đề tài nguyên

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

Tôi chỉ đang cố gắng tải dữ liệu trong các biểu mẫu nhưng tôi không biết tại sao lỗi đó xuất hiện. Điều gì có thể là sai lầm ở đây?

+1

tôi sẽ khuyên bạn nên ít nhất là dàn diễn viên '$ _GET [ 'id']' với 'int': 'mysql_query (" CHỌN * TỪ học sinh WHERE IDNO = ". (Int) $ _ GET ['id']);' – binaryLV

Trả lời

23

Bạn đang không làm kiểm tra lỗi sau khi cuộc gọi đến mysql_query:

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

Trong trường hợp mysql_query thất bại, nó sẽ trả về false, một giá trị boolean. Khi bạn vượt qua điều này để mysql_fetch_array chức năng (mà dự kiến ​​một mysql result object), chúng tôi nhận được lỗi này.

0

Đảm bảo rằng truy vấn của bạn đã chạy thành công và bạn đã nhận được kết quả. Bạn có thể kiểm tra như sau:

$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

Nguyên nhân rất có thể là do lỗi trong mysql_query(). Bạn đã kiểm tra để đảm bảo nó hoạt động? Xuất giá trị của $resultmysql_error(). Bạn có thể đã sai chính tả một cái gì đó, chọn cơ sở dữ liệu sai, có một vấn đề cấp phép, vv Vì vậy:

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

Vệ sinh $_GET['id']thực sự quan trọng. Bạn có thể sử dụng mysql_real_escape_string() nhưng truyền đến int là đủ cho số nguyên. Về cơ bản bạn muốn tránh SQL injection.

0

Trong cơ sở dữ liệu của bạn loại "IDNO" là gì? Bạn có thể cần phải thoát khỏi sql đây:

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

luôn làm theo cách này và nó sẽ cho bạn biết những gì là sai

0

Bạn đang sử dụng này:

mysql_fetch_array($result) 

Để có được lỗi bạn đang nhận được, điều đó có nghĩa là $result không phải là tài nguyên.


Trong code của bạn, $result thu được theo cách này:

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

Nếu truy vấn SQL thất bại, $result sẽ không được một nguồn lực, nhưng một boolean - xem mysql_query.

Tôi cho rằng có một lỗi trong truy vấn SQL của bạn - vì vậy nó không thành công, mysql_query trả về một boolean, và không phải là một tài nguyên, và mysql_fetch_array không thể làm việc trên đó.


Bạn nên kiểm tra nếu truy vấn SQL trả về một kết quả hay không:

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

Với điều đó, bạn sẽ nhận được một thông điệp rằng chỉ ra lỗi xảy ra trong khi thực hiện truy vấn của bạn - điều này sẽ giúp hình vấn đề là gì ;-)


Ngoài ra, bạn nên thoát khỏi dữ liệu bạn đang đưa vào truy vấn SQL của mình, để tránh SQL injections!

Ví dụ, ở đây, bạn nên chắc chắn rằng $_GET['id'] chứa không có gì khác hơn so với một số nguyên, sử dụng một cái gì đó như thế này:

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

Hoặc bạn nên kiểm tra này trước khi cố gắng để thực hiện truy vấn, để hiển thị một đẹp hơn thông báo lỗi cho người dùng.

2

này cung cấp cho một thử

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

Tôi nghĩ làm việc này ..

Các vấn đề liên quan