2011-02-16 31 views
11

He estado teniendo problemas para obtener el número de filas a devolver usando mysqli. Acabo de recibir 0 de vuelta cada vez, aunque definitivamente hay algunos resultados.¿Por qué mysqli num_rows siempre devuelve 0?

if($stmt = $mysqli->prepare("SELECT id, title, visible, parent_id FROM content WHERE parent_id = ? ORDER BY page_order ASC;")){ 
    $stmt->bind_param('s', $data->id); 
    $stmt->execute(); 
    $num_of_rows = $stmt->num_rows; 
    $stmt->bind_result($child_id, $child_title, $child_visible, $child_parent); 

    while($stmt->fetch()){ 
     //code 
    } 

    echo($num_of_rows); 

    $stmt->close(); 
} 

¿Por qué no muestra el número correcto?

+0

Lo que hace un var_dump en $ stmt produce? – JamesHalsall

+0

print_r() devuelve: mysqli_stmt Objeto ([affected_rows] => -1 [insert_id] => 0 [num_rows] => 0 [param_count] => 1 [field_count] => 4 [errno] => 0 [error ] => [sqlstate] => 00000 [id] => 1) – ollie

+0

asegúrate de que los datos estén disponibles ... – ajreal

Respuesta

22

es necesario llamar a MySqli_Stmt::store_result() antes de la num_rows de búsqueda:

if($stmt = $mysqli->prepare("SELECT id, title, visible, parent_id FROM content WHERE parent_id = ? ORDER BY page_order ASC;")){ 
    $stmt->bind_param('s', $data->id); 
    $stmt->execute(); 
    $stmt->store_result(); <-- This needs to be called here! 
    $num_of_rows = $stmt->num_rows; 
    $stmt->bind_result($child_id, $child_title, $child_visible, $child_parent); 

    while($stmt->fetch()){ 
     //code 
    } 

    echo($num_of_rows); 

    $stmt->close(); 
} 

Ver the docs on MySQLi_Stmt->num_rows, que dice que la derecha en la parte superior de la página (en el bloque principal descripción) ...

+0

¡Debo haberlo perdido! Muchas gracias por su ayuda. – ollie

+2

Me perdí eso también. No está en la mayoría de los ejemplos en PHP.net. –

+0

Llevo como una hora intentando esto y no puedo hacer que funcione. Justo copió el código, cambia el nombre y los campos de la tabla. Nada. ¿Cómo puede una característica tan básica ser tan difícil? – xzdead

-2

Intente configurar su $num_of_rows justo después de su if (declaración) - before bind_param ... A menos que eso cambie sus resultados. Difícil de decir sin más información.

+0

Gracias por la respuesta - aún devuelve 0. ¿Qué otra información necesitas? – ollie

+0

Parece que hay algo mal en su consulta. Intente hacer una consulta directa como 'if ($ stmt = $ mysqli-> query (" SELECT id, title, visible, parent_id FROM content WHERE parent_id = YOURIDHERE ORDER BY page_order ASC; ")) {' y vea si eso todavía está pateando out 0 results – TNC

+0

Hacer num_rows justo después de que if() no hará nada - la consulta no se ha ejecutado todavía, por lo que es imposible saber cuántas filas se han devuelto. –

Cuestiones relacionadas