2016-03-28 9 views
0

mysqli_num_rowsを使ってテーブルの行数を表示しようとしています。結果を印刷すると、実際に複数の行があるときには1行しかないという。PHP - mysqli_num_rows - 私は多くの行を持っていると1行しかないと言っています

phpMyAdminでSQLをテストすると、正しい行数がカウントされます。しかし、Webページに結果を表示すると、1行だけがカウントされます。

私を助けてください。私が間違っていることは何ですか?

$mysqli = new mysqli("localhost", "myusername", "mypass", "mydatabase"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

if ($result = $mysqli->query("SELECT COUNT(*) FROM mytable")) { 

    /* determine number of rows result set */ 
    $row_cnt = $result->num_rows; 

    printf("Result set has %d rows.\n", $row_cnt); 

    /* close result set */ 
    $result->close(); 
} 

/* close connection */ 
$mysqli->close(); 

上記のコードは関係なく、私が持っているどのように多くの行は、次の手順を印刷しない:

結果セットは1行があります。

+5

カウント機能を削除してください。それはどちらか一方です。 –

+2

Fredのコメントを詳しく述べると、 'COUNT'は行の 'groups'で働く多くの集約関数の一つです。あなたのクエリでは、 'COUNT'は自動的にグループのすべての行を単一の行に '折りたたみ'ます。この場合、あなたのグループにはすべての行が含まれています。 – noahnu

+0

ありがとうございます。それは働いた。 – Brandon

答えて

3

単純なCOUNT(*)文の結果は常に1行です。その行をフェッチして、最初の列から返された値を取得します。

+0

*私の口から出てきた言葉をちゃんと取り出しました* ;-) –

0

データベースが小さければ、このようにすることができます。

if ($result = $mysqli->query("SELECT * FROM mytable")) { 

    /* determine number of rows result set */ 
    $row_cnt = $result->num_rows; 

    printf("Result set has %d rows.\n", $row_cnt); 

    /* close result set */ 
    $result->close(); 
} 

私は大きなデータベースを使って、コメントの中で述べたようにこれを行うことができます。 PDOやオブジェクト指向のリクエストではあまり良くありませんので、これは手続き型になります。あなたはCOUNTを使用する場合

$conn = mysqli_connect($servername, $username, $password, $dbname); 

if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$sql = "SELECT COUNT(*) FROM users"; 
$result = mysqli_query($conn, $sql); 

if(mysqli_num_rows($result)){ 
    $row = mysqli_fetch_row($result); 
    printf("Result set has %d rows.\n", $row[0]); 
} 

mysqli_close($conn); 
+4

このようにすることの欠点は、レコードセット全体を返すことです。あなたが 'SELECT count(*)'を残しておくと、行。小規模なデータベースの場合はほとんど違いはありませんが、数百万行がある場合は、データベースに合計を実行するほうがずっと効率的です。 – andrewsi

+0

ありがとうございます。これは私がやったことです。それは小さなデータベースです。 – Brandon

1

は実際には、クエリの結果は、行の数です。 私は通常、何が起こるかを確認するために、のphpmyadminに直接SQLクエリを書き込もうとします。

0
<?php 
    $mysqli = new mysqli("localhost", "myusername", "mypass", "mydatabase"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$sql="SELECT * FROM mytable"; 

if ($result=mysqli_query($con,$sql)) 
    { 
    // Return the number of rows in result set 
    $rowcount=mysqli_num_rows($result); 
    printf("Result set has %d rows.\n",$rowcount); 
    // Free result set 
    mysqli_free_result($result); 
    } 

mysqli_close($con); 
?> 

結果セットの行数をフェッチするには、mysqli_num_rows()メソッドを使用します。

リンクを参照してください。http://php.net/manual/en/mysqli-result.num-rows.php

関連する問題