2017-02-09 11 views
1

PHPでselectクエリによって返される行数を取得したいと考えています。PHP - SQL SELECTクエリで返される行数を取得する

$connection = new mysqli($server_name, $server_login, $server_password, $dbName); 

if (!$connection) { 
    echo "error"; 
    die("Connection failed. ".mysqli_connect_error()) 
} 

//... 

$command = "SELECT player_id FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."' "; 

$result = mysqli_query($connection, $command); 
echo num_rows($result); 

(実際には結果を)私もmysqli_stmt_num_rows()mysqli_num_rows()で試したが、私の結果は常にnullである - :私は、次のコードを持っています。

あなたはその理由を知っていますか?ありがとう。

+2

トライ数()関数はありません取得します。行の –

+1

@RahulPawar 'count'は配列に対して機能します。 OPはクエリに一致する行数を求めています! –

+2

@RahulPawarはmysql関数を意味すると思います。COUNT –

答えて

8

行の数は、最も一般的なものは、MySQLでCOUNT(*)を実行することですが、(あなたがその機能を自分で作成しない限り、あなたは、使用のようではないnum_rows()mysqli_num_rows($result)もあります、返さを取得する方法はいくつかあります。 mysqli_stmt_num_rows()query()の代わりにprepare()を使用している場合にのみ機能します。

COUNT(*)を使用するには、最初にクエリを実行して取得する必要があります。mysqli_num_rows()は、クエリが失敗しなかった場合に使用できるMySQLiResultオブジェクトによって返される定数です。

クエリが実際に成功したかどうかを確認するコードを修正しました。クエリが失敗した場合、mysqli_num_rows()は機能しません。

$command = "SELECT player_id FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."' "; 

if ($result = mysqli_query($connection, $command)) { 
    echo mysqli_num_rows($result); 
} else { 
    /* Query failed */ 
    echo "There was an error with the query: $command"; 
    echo "<br />".mysqli_error($connect); 
} 

COUNT(*)を使用することもできますが、最初に結果を取得する必要があります。

$command = "SELECT player_id, COUNT(*) as cnt FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."' "; 

if ($result = mysqli_query($connection, $command)) { 
    $row = mysqli_fetch_assoc($result); 
    echo $row['cnt']; 
} else { 
    /* Query failed */ 
    echo "There was an error with the query: $command"; 
    echo "<br />".mysqli_error($connect); 
} 

また、あなたがその身を守るためにプレースホルダを用いてプリペアドステートメントを使用する方法を学ぶ必要があり、このクエリは、SQLインジェクションの脆弱性であることに注意してください。 manual on prepare()はそれを開始するのに適しています。


また、プレーンテキストで、または(例えばmd5またはsha1など)が悪いの方法のいずれかでパスワードを保存しているようです。 PHPのオファーには、組み込み関数password_hash()/password_verify()を使用する必要があります。 PHPバージョン5.5より下の場合、これらの関数はネイティブではありませんが、代わりに使用できるCompability Packがあります。

最終的に、オブジェクト指向と手続き型コードを混合することは技術的には機能しますが(実際は手続き型のものがオブジェクト指向のものを呼び出すため)、悪い習慣とみなされます。オブジェクトと接続する場合は、引き続きオブジェクト指向のコードを使用してください。

参照

  • http://php.net/password_hash
  • +3

    この回答は有効で、質問に答えます、私はなぜdownvoteについて興味がありますか? – Qirel

    +0

    また、好奇心がDVDに理由を知って –

    +1

    Upvote私から!質問に答えて、OPに多くの有用な情報を与えます! –

    5
    $command = "SELECT count(*) as numberofrecord, player_id FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."' "; 
    
    3

    非常にシンプルなソリューション: -

    以下の方法で使用$result->num_rows: -

    if ($result = $mysqli->query("SELECT player_id FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."'")) { 
        printf("Select returned %d rows.\n", $result->num_rows); 
    } 
    

    参考: - http://php.net/manual/en/mysqli.query.php

    注: -

    一方、prepared statementを読んで、コードをSQL Injectionから防ぐために使用してください。

    パスワードを保存している間は、いつもpassword hashing mechanismを使用してください(プレーンパスワードを使用した場合)。

    関連する問題