2012-07-03 74 views
15

En este momento tengo un archivo PHP que realiza una consulta MySQL y luego cuenta filas como este:alternativo para mysql_num_rows utilizando DOP

$count=mysql_num_rows($result); 


if ($count == 1) { 
    $message = array('status' => 'ok'); 
} else { 
    $message = array('status' => 'error'); 
} 

Esto funciona bien, pero estoy tratando de cambiar todos mis archivos PHP para usar PDO. Entonces, ¿cómo se puede hacer esto con PDO?

+0

http: // stackoverflow. com/questions/2700621/p hp-pdo-num-rows – dude

+0

No necesita tal función en absoluto. Ver [obtener el recuento de filas con PDO] (https://phpdelusions.net/pdo#count) –

Respuesta

21
$res = $DB->query('SELECT COUNT(*) FROM table'); 
$num_rows = $res->fetchColumn(); 

o

$res = $DB->prepare('SELECT COUNT(*) FROM table'); 
$res->execute(); 
$num_rows = $res->fetchColumn(); 

Puedes u SE Este a preguntar si existen datos o se selecciona, también:

$res = $DB->query('SELECT COUNT(*) FROM table'); 
$data_exists = ($res->fetchColumn() > 0) ? true : false; 

o con sus variables:

$res = $DB->query('SELECT COUNT(*) FROM table'); 
$message = ($res->fetchColumn() > 0) ? array('status' => 'ok') : array('status' => 'error'); 
+2

estoy equivocado o solo obtendrá "primera columna de la próxima fila" http://uk3.php.net/manual/ es/pdostatement.fetchcolumn.php – fearis

+0

Sin un parámetro en fetchColumn, obtendrá la primera columna de la fila seleccionada. Pero solo obtenemos 1 resultado y ese es el conteo. La siguiente fila significa que, cuando no haya buscado una fila o columna, comenzará con la primera fila de resultados. Después de volver a llamar a fetchColumn, obtendrá el contenido de la siguiente fila. – WolvDev

+0

Sí, fetchcolumn() devuelve el primer colmn de la fila, en su lugar, necesita usar rowCount() – Asuquo12

3

Si no está utilizando comandos preparados luego tratar:

$find = $dbh->query('SELECT count(*) from table'); 
if ($find->fetchColumn() > 0){ 
    echo 'found'; 
} 

Sin embargo, si elige declaraciones preparadas, que recomiendo altamente, entonces:

$find = $dbh->prepare('SELECT count(*) from table'); 
$find->execute(); 
if ($find->fetchColumn() > 0){ 
    echo 'found'; 
} 
5

Tal vez usted puede utilizar el método de la DOP "fetchAll", que devuelve una matriz que contiene toda la SELECT resultados. Luego use el método de "conteo" para contar las filas de la matriz.

Ex:

$rows = $stmt->fetchAll(); 
$num_rows = count($rows); 
+1

Esto podría ser costoso en un conjunto de datos grande si todo lo que necesita saber es el número de resultados. –

+1

@QuinnComendant, la función 'rowCount()' solo devuelve un recuento exacto * después * de todas formas recoge todas las filas. –

+1

@BillKarwin, ¿quisiste decir 'mysql_num_rows()'? El método 'rowCount()' de PDO "devuelve el número de filas afectadas por la última declaración DELETE, INSERT o UPDATE", no es lo mismo. –

1

puede ser así ...

$numRows = $conn->query("SELECT COUNT(*) FROM yourtable")->fetchColumn(); 
echo $numRows; 
5
$stmt = $db->query('SELECT * FROM table'); 
$row_count = $stmt->rowCount(); 
echo $row_count.' rows selected'; 
-1
$jmldata  = $db->query("SELECT count(*) FROM blog_posts")->fetchColumn(); 
    $jmlhalaman = $p->jumlahHalaman($jmldata, $batas); 
    $linkHalaman = $p->navHalaman($_GET['halpost'], $jmlhalaman); 

    echo "<div class='center_title_bar'>Halaman : $linkHalaman </div> 
    </div></div></div> 
    "; 

funciona gracias :)

-1
//query for counting the total number of rows 
$result = $conn->prepare("SELECT COUNT(*) FROM your_table"); 
    $result->execute(); 
    $num_rows = $result->fetchColumn(); 

    //condition to display the result 
    if ($num_rows>0) 
    { 
     echo "there is some results =".$num_rows; 
    }else{ 
     echo "no result"; 
    } 
+1

¿Entiende su propio código? – Benjamin

+0

¡No está claro! – Younes27

Cuestiones relacionadas