2010-04-23 21 views
9

Duplicar posibles:
“Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given” error while trying to create a php shopping cartmysql_fetch_array() espera parámetro de 1 a ser el problema de los recursos

Yo no lo entiendo, no veo errores en el código, pero no hay este error , por favor ayuda:
mysql_fetch_array() espera parámetro de 1 a ser el problema de los recursos

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

Estoy tratando de cargar los datos en los formularios, pero no sé por qué aparece ese error. ¿Cuál podría ser el error aquí?

+1

recomendaría a al menos elenco '$ _GET [ 'id']' 'a int': ' mysql_query (" SELECCIONAR * FROM estudiante WHERE IDNO = ". (Int) $ _ GET ['id']);' – binaryLV

Respuesta

23

No estás haciendo comprobación de errores después de la llamada a mysql_query:

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

En caso mysql_query falla, devuelve false, un valor boolean. Cuando pasa esto a la función mysql_fetch_array (que espera un mysql result object) obtenemos este error.

0

Asegúrate de que tu consulta se haya ejecutado correctamente y obtengas los resultados. Se puede comprobar como esta:

$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

La causa más probable es un error en mysql_query(). ¿Has revisado para asegurarte de que funcionó? Da salida al valor de $result y mysql_error(). Es posible que haya escrito mal algo, la base de datos seleccionada mal, tiene un problema de permisos, etc Por lo tanto:

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

sanitización $_GET['id'] es realmente importante. Puede usar mysql_real_escape_string() pero fundirlo en un int es suficiente para enteros. Básicamente, quieres evitar la inyección de SQL.

0

En su base de datos, ¿cuál es el tipo de "IDNO"? Puede que tenga que escapar del sql aquí:

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

siempre lo hacen de esta manera y le dirá lo que está mal

0

Está utilizando la siguiente:

mysql_fetch_array($result) 

Para llegar el error que está recibiendo, significa que $result no es un recurso.


En su código, $result se obtiene de esta manera:

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

Si la consulta SQL falla, $result no va a ser un recurso, pero un valor lógico - ver mysql_query.

supongo que hay un error en la consulta SQL - por lo que no funciona, mysql_query devuelve un valor lógico, y no un recurso, y mysql_fetch_array no puede trabajar en eso.


Debe comprobar si la consulta SQL devuelve un resultado o no:

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

Con esto, usted debe conseguir un mensaje que indica el error que se produjo durante la ejecución de la consulta - esto debería ayudar a la figura cuál es el problema ;-)


Además, debe evitar los datos que está poniendo en su consulta SQL, para evitar SQL injections!

Por ejemplo, aquí, usted debe asegurarse de que $_GET['id'] contiene nada más que un número entero, usando algo como esto:

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

O usted debe comprobar esto antes de intentar ejecutar la consulta, para mostrar una mejor mensaje de error para el usuario

2

seguirlo

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

Creo que esto funciona ..

Cuestiones relacionadas