2009-07-24 8 views
11

He intentado lo que pareció la forma más intuitiva¿Cuál es la forma correcta de comprobar si mysql_query() devolvió algún resultado?

$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' 
            AND password = '$_CLEAN[password]'"; 
$result = mysql_query($query); 

if ($result) 
{ ... 

pero eso no funcionó debido a mysql_query devuelve un valor verdadero incluso si se devuelven 0 filas. Básicamente quiero realizar la lógica en esa condición solo si se devuelve una fila.

+0

El uso de '$ _CLEAN' parece muy sospechoso en el código. Vea aquí por qué esta es una mala idea: http://stackoverflow.com/questions/6164522/will-this-code-actually-work-against-sql-injection – Johan

Respuesta

22

Uso mysql_num_rows:

if (mysql_num_rows($result)) { 
    //do stuff 
} 
+1

Para juegos grandes, esta función es menos eficiente que usar mysql_fetch_array, pero aquí ciertamente se ve bien. – Smandoli

7

Si usted está mirando para exactamente una fila:

if ($Row = mysql_fetch_object($result)) { 
    // do stuff 
} 

Puede utilizar mysql_fetch_array() lugar, o lo que sea, pero el principio es el mismo. Si estás haciendo esperar 1 o más filas:

while ($Row = mysql_fetch_object($result)) { 
    // do stuff 
} 

Este bucle hasta que se agote de filas, momento en el que se va a seguir adelante.

2

¿Qué hay de esta manera:

$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' 
            AND password = '$_CLEAN[password]'"; 
$result = mysql_query($query); 
$result = mysql_fetch_array($result); 

//you could then define your variables like: 
$username = $result['username']; 
$password = $result['password']; 

if ($result) 
{ ... 

me gusta porque puedo llegar a ser muy específico con los resultados devueltos por el mysql_query.

-Ivan Novak

1

así ...

por mysql_query definiton:

mysql_query() devuelve un recurso en de éxito, o FALSE en caso de error.

pero lo que hay que entender es que si esta función devuelve un valor diferente a FALSO la consulta se ha ejecutado sin problemas (sintaxis correcta, conecte aún con vida, etc.), Pero esto no significa que la consulta está volviendo un poco de fila .

por ejemplo

<?php 

$result = mysql_query("SELECT * FROM a WHERE 1 = 0"); 

print_r($result); // => true 

?> 

así que si tienes FALSO puede utilizar

mysql_errorno() y mysql_error() saber lo que pasó ..

siguiendo con esto:

puede utilizar mysql_fetch_array() para obtener fila por fila de una consulta

6

mysql_num_rows

recupera el número de filas de un conjunto de resultados. Este comando solo es válido para sentencias como SELECT o SHOW que devuelven un conjunto de resultados real.

Si ninguno coincide, entonces cero será el valor de retorno y efectivamente FALSE.

$result = mysql_query($query); 

if(mysql_num_rows($result)) 
{ //-- non-empty rows found fitting your SQL query 

    while($row = mysql_fetch_array($result)) 
    {//-- loop through the rows, 
    //-- each time resetting an array, $row, with the values 

    } 
} 

Lo que está bien y bien si solo se saca de la base de datos. Si cambia o borrar registros de la base de datos y desea saber cuántos fueron afectados por ella ...

Para recuperar el número de filas afectadas por una instrucción INSERT, UPDATE, sustituir o eliminar la consulta, utilice mysql_affected_rows().

$result = mysql_query($query); 

if(mysql_affected_rows()) 
{ //-- database has been changed 

} 

//-- if you want to know how many rows were affected: 
echo 'Rows affected by last SQL query: ' .mysql_affected_rows(); 

mysql_query() sólo devolverá FALSE si la consulta no. Devolverá TRUE incluso si no tiene filas, pero ha consultado con éxito la base de datos.

+0

¡Buena explicación allí! – jolt

3

que utilizó la siguiente:

if (! $ Resultado = 0 & & mysql_num_rows ($ result)) {

Si una consulta devuelve nada será un resultado booleano y su valor será 0 .

así que comprobar si es o no un cero, y si no es así, sabemos que hay algo allí ..

sin embargo, a veces se volverá a 1, incluso cuando no hay nada allí, por lo ENTONCES comprueba si hay filas y si hay una fila completa allí, usted está seguro de que se ha devuelto un resultado.

5
$sql = "SELECT columns FROM table"; 
$results = mysql_query($sql, $conn); 
$nResults = mysql_num_rows($results); 
if ($nResults > 0) { 
    //Hurray 
} else { 
    //Nah 
} 

Esto debería funcionar.

+0

no funciona $ resultado es falso –

0
$result = mysql_query(...); 

if(false !== $result) 
{ 
    //... 
} 
+0

['mysql_query()'] (http://php.net/manual/en/function.mysql-query.php) devolverá FALSE solamente por error. En caso de resultado vacío, devuelve un recurso vacío. Tu código no funcionará Por cierto, hubiera sido la misma escritura 'if ($ result)' –

Cuestiones relacionadas