2012-09-14 25 views
5

¿Cómo puedo verificar si mi conjunto de resultados está vacío usando PDO en PHP?¿Cómo verifico los resultados devueltos de la consulta db usando el PDO de PHP?

$SQL = "SELECT ......... ORDER BY lightboxName ASC;"; 
$STH = $DBH->prepare($SQL); 
$STH->bindParam(':member_id', $member_id); 
$STH->execute(); 
$STH->setFetchMode(PDO::FETCH_ASSOC); 

while($row = $STH->fetch()) { 
    $lightbox_name = $row['lightboxName']; 
    $lightbox_id = $row['lightboxID']; 
    echo '<option value="'.$lightbox_id.'">'.$lightbox_name.'</option>'; 
} 

Solía ​​hacerlo de esta manera:

$result = mysql_query("SELECT ...... ORDER BY lightboxName ASC;"); 
if(!$result) { echo 'No results found!'; } 

Pero sólo han empezado a utilizar las DOP y las declaraciones preparadas y comprobando contra $STH no parece que funciona como se esperaba - que siempre tiene valor!

Respuesta

8

me gustaría tratar de utilizar rowCount():

$rows_found = $STH->rowCount(); 

Pero, de acuerdo con el manual:

Si la última sentencia SQL ejecutada por el PDOStatement asociado era una instrucción SELECT, algunas bases de datos puede devuelve el número de filas devuelto por esa declaración. Sin embargo, este comportamiento no está garantizado para todas las bases de datos y no se debe confiar en las aplicaciones portátiles .

Si no funciona, puede utilizar el otro método mencionado en el manual.

Por supuesto, puede también establecer una variable antes de su bucle while, cambie en su bucle y comprobar el valor después del bucle ...

+0

Perfecto. Funciona según lo previsto.Estaba leyendo sobre esto y otra forma de hacerlo es usar columnCount(). ¿Crees que hay una diferencia de rendimiento entre rowCount() y columnCount()? – ShadowStorm

+0

@ShadowStorm 'columnCount()' debe ser súper rápido, pero de nuevo, 'rowCount()' también si está disponible. Tendrás que probar eso para estar seguro. – jeroen

+1

He encontrado que 'columnCount()' funciona mejor porque devolverá '0' en todos mis casos de prueba. 'rowCount()' a menudo devuelve las filas modificadas y descarta mi lógica. – Ben

1

Solo volcar información sobre la variable.

var_dump($STH) 

EDITAR

yo acabamos de la cuestión. Hay una función rowCount() para eso. Simplemente use $STH->rowCount(); para el recuento de filas y luego compárelo.

+2

¡Esa no es una respuesta a mi pregunta! No quiero descargar mi variable. Quiero comprobar si la consulta de la base de datos arrojó resultados. – ShadowStorm

+0

haga algo como return $ result, y luego print_r() –

+0

@ mk_89: no tengo una variable $ result, tengo $ STH variable y siempre contiene datos si tiene un conjunto de resultados o no. – ShadowStorm

0

bien aquí es el código que hace el trabajo y, finalmente, después de unas horas de mirar a su alrededor y mezclar haciendo coincidir algunas respuestas aquí es uno que, de hecho, devolverá un conteo en su declaración seleccionada. SQL es la instrucción de selección obviamente $ username1 es la publicación del cuadro de texto para nombre de usuario. $ password1 es lo mismo que la configuración del nombre de usuario. Aparte de eso, debe tener todo lo que necesita para que funcione, simplemente sustituya sus variables en lugar de las mías. Espero que esto ahorre tiempo a algunas personas ya que busqué por un tiempo tratando de obtener exactamente lo que quería aquí. Esta solución es para cuando tiene una declaración seleccionada y desea poder continuar o detenerse en función de que devuelva algo.

SQL = 'SELECT * from Users WHERE Username = :Username AND Password = :Password'; 
STH = $conn->prepare($SQL); 
STH->bindParam(':Username', $username1); 
STH->bindParam(':Password', $password1); 
STH->execute(); 
STH->setFetchMode(PDO::FETCH_ASSOC); 


row_count = $STH->rowCount(); 
Cuestiones relacionadas