2011-02-16 21 views
5

Estoy intentando evitar que el error mysql_query se envíe a mi formulario. Actualmente, si no existe una ubicación encontró, recibo el errorCatching mysql_query error

"Advertencia: mysql_result() [function.mysql-result]: No se puede saltar a la fila 0 en el índice de resultado de MySQL 11"

Estoy tratando de detectar este error y, en su lugar, asignar la variable $ location a no encontrado. Mi código para intentar esto está abajo, ¿qué estoy haciendo mal?

Gracias!

$query3 = "SELECT `location` FROM location WHERE vin = '$vin' LIMIT 1"; 
$result3 = mysql_query($query3); 

if (!mysql_result($result3,0)) { 
    $location = "Not found"; 
} else $location = mysql_result($result3,0,0); 

Respuesta

6

mysql_result() generalmente no se debe utilizar. Usted sería mejor con algo como:

$result3 = mysql_query($query3) or die(mysql_error()); 

if (mysql_numrows($result3) == 0) then 
    $location = "not found"; 
} else { 
    $row = mysql_fetch_array($result3); 
    $location = $row[0]; 
} 

Su error es causado por el hecho de que la consulta devuelve ninguna fila - por ejemplo, nada emparejado Luego trató de recuperar el primer campo en la primera fila de ese conjunto de resultados, una fila que no existe. Comprobar el número de filas devueltas con mysql_numrows() es más seguro, ya que funciona si la consulta no encontró nada o un número de filas.

+0

Esta debe ser la forma correcta de resolver esto. No ocultes tus problemas, resuélvelos en su lugar;) –

+0

¡Funcionó muy bien, gracias! – cds5059

0

En primer lugar, se puede añadir @:

if ([email protected]_result($result3,0)) { 
    $location = "Not found"; 
} else $location = mysql_result($result3,0,0); 

En segundo lugar, se puede comprobar antes de mysql_num_rows(result3)mysql_result llamada.

+0

Ocultar errores con el operador '@' normalmente es una mala idea. –

+0

@ Álvaro G. Vicario - Sí. Pero el codificador debe conocer todas las características del lenguaje en el que está codificando. Creo que la segunda variante es preferible también. –

0

Debería buscar la manera de establecer los niveles de error y advertencia en php ini; por lo general, desea obtener un pequeño resultado de prod en la medida de lo posible.

http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

Sin embargo, aquí, el código que generaría que el error es:

$result3 = mysql_query($query3); 

Esa es la línea que debe escribir sus estados de cuenta si o "o morir" en torno a:

$result3 = mysql_query($query3)or die($location = "not found"); 
+0

'mysql_query()' devuelve FALSE cuando la consulta falla, no cuando devuelve cero filas. –

0

Mysql_query devuelve falso si no se encuentra nada así de simple:

$result3 = mysql_query($query3); 

if (mysql_affected_rows($result3) == 0) { 
    $location = "Not found"; 
} else $location = mysql_result($result3,0,0); 

Debería hacerlo.

+0

En esta situación, 'mysql_query()' debería devolver FALSE cuando el servidor MySQL falla, la conexión se cae o casos similares. Una consulta que no devuelve filas no es un error. –

+0

El error que informó el OP es causado por el comando mysql_result porque mysql_query anterior no arrojó ningún resultado. Mi respuesta se refiere a la causa no con el síntoma. – Yahel

+0

Méa culpa, no entendí tu comentario. mysql_query devuelve falso solo si la sentencia sql causó un error. No si el recuento de filas es 0. Estoy corrigiendo mi respuesta en función de eso. – Yahel

0

Debería considerar el uso de OOP; utilizando una clase de base de datos para manejar la interacción con su base de datos.

Pero, básicamente, desea comprobar si hay alguna fila, antes de intentar recuperar los resultados.

trata de leer con "mysql_num_rows" en su "if":

if (!mysql_num_rows($result3)) { 
Cuestiones relacionadas