2010-04-23 12 views
9

Powiel możliwe:
“Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given” error while trying to create a php shopping cartmysql_fetch_array() oczekuje parametr 1 być problemem zasobów

ja nie rozumiem, widzę żadnych błędów w tym kodzie, ale nie jest to błąd proszę o pomoc:
mysql_fetch_array() oczekuje parametr 1 być problemem zasobów

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

Próbuję załadować dane w formularzach, ale nie wiem, dlaczego pojawia się ten błąd. Co może być tutaj błędem?

+1

Polecam przynajmniej obsadzie '$ _GET [ 'id']' na 'int': ' mysql_query (” SELECT * FROM student WHERE IDNO = ". (Int) $ _ GET ['id']);' – binaryLV

Odpowiedz

23

Nie robią sprawdzanie błędów po wywołaniu mysql_query:

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

W przypadku mysql_query się nie powiedzie, to zwraca false wartość boolean. Po przekazaniu tego do funkcji mysql_fetch_array (która oczekuje mysql result object) otrzymujemy ten błąd.

0

Upewnij się, że zapytanie zakończyło się pomyślnie i otrzymałeś wyniki. Można sprawdzić w ten sposób:

$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

Najbardziej prawdopodobną przyczyną jest błąd w mysql_query(). Czy sprawdziłeś, czy działa? Wyprowadź wartość $result i mysql_error(). Być może błędnie coś, wybrano niewłaściwy bazy danych, mają problem uprawnienia, itd. Tak więc:

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

Dezynfekcja $_GET['id'] jest naprawdę ważne. Możesz użyć mysql_real_escape_string(), ale rzutowanie go na int jest wystarczające dla liczb całkowitych. Zasadniczo chcesz uniknąć iniekcji SQL.

0

W swojej bazie danych, jaki jest typ "IDNO"? Może trzeba będzie uciec sql tutaj:

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

zawsze robią to w ten sposób i powie to, co jest złe

0

Używasz tego:

mysql_fetch_array($result) 

Aby dostać błąd, który otrzymujesz, oznacza, że ​​$result nie jest zasobem.


W kodzie $result uzyskuje się w ten sposób:

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

Jeśli zapytanie SQL nie powiedzie, $result nie będzie źródłem, ale logiczna - patrz mysql_query.

Przypuszczam tam błąd w zapytaniu SQL - tak to się nie powiedzie, mysql_query zwraca wartość logiczną, a nie zasobów i mysql_fetch_array nie może pracować na tym.


Należy sprawdzić, czy zapytanie SQL zwraca wynik czy nie:

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

z tym, powinien pojawić się komunikat wskazujący na błąd, który wystąpił podczas wykonywania zapytanie - to powinno pomóc rysunek na czym polega problem ;-)


Również powinieneś unikać danych, które umieszczasz w zapytaniu SQL, aby uniknąć SQL injections!

Na przykład tutaj, należy upewnić się, że $_GET['id'] zawiera nic innego jak liczba całkowita, używając coś takiego:

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

Albo należy sprawdzić przed próbą wykonania zapytania, aby wyświetlić ładniejszy komunikat o błędzie dla użytkownika.

2

spróbuj tego

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

myślę, że to działa ..

Powiązane problemy