0

PHP、PDO を使用してゲーム データベースにクエリを実行し、参加可能なゲームを取得します。Fetch を使用すると、条件を満たす最後の行が返されます。最初の行が必要なので、現在 FetchAll を使用してから、取得した最初の行を調べています。Fetch を使用して、最初の行だけを取得するように指示する方法はありますか。FetchAll を使用すると、必要以上のデータを収集しているように見えます。

私はこれらすべてに非常に慣れていませんが(貿易によるアニメーター)、古いmysqlに頭を悩ませていたので、今では素晴らしいと思われるPDOの使用に移行しました。動作する非同期ゲーム サーバーをゆっくりと構築しています。

これは私のコードです。これは機能しますが、FetchAll を使用しなかった場合、より効率的になるかどうか疑問に思います。

       //Set variables to use when searching for random game in table
       $player2_id = 0; //if 0 then player 2 slot has not been filled.
       $whose_turn = 2;  //if 2 then its player twos go...so good to join.


        //IS THERE A RANDOM GAME TO JOIN 
        $current_game = $db->prepare("SELECT * FROM games_database WHERE player2_id=? AND whose_turn=?");
        $current_game->execute(array($player_2_id, $whose_turn));

        //Fetch All the results
        $random_game_to_use = $current_game->fetchAll(PDO::FETCH_ASSOC);

        //Get the first of all the results
        $firstAvailableGame = $random_game_to_use[0];
        $rand_game_name = $firstAvailableGame['game_name'];

それが理にかなっていることを願っています。どんな助けや知恵の真珠もありがたく受け取られるでしょう. また、PHP および PDO データベース クエリのコーディングを学ぶ上で、Stackoverflow は非常に役立つ Web サイトでした。私はおそらく人生で約4回コーディングを学ぼうとしましたが、最終的にはうまく定着し始めました. これは私の最初の質問です...ジョンに感謝します。

4

2 に答える 2

-1

fetch() で 1 つのレコードのみを選択する

/core/model.php

@テーブルから値を選択

@access public

@param string $table テーブルの名前

@param 文字列 $fieldname

@param 文字列 $id

@成功した場合は特定の行をオブジェクトとして返すか、失敗した場合は PDOException をスローします

@warn : 列から一意の値のみを選択します

public function dbSelectOne($table, $fieldname=null, $id=null)
{
$this->conn();
$sql = "SELECT * FROM `$table` WHERE `$fieldname`=:id";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_OBJ);
}

例:

$client = $this->pdo->dbSelectOne('clients', 'id_client', $id );
echo $client->name;

注意: レコードが見つからない場合は、検証を行う必要があります。

pdo はエラーをスローしないため、try{} catch{} は空のオブジェクトには役に立ちません

if(empty($client)){ /* do something */ }

ただし、テーブルまたはフィールド名が有効でない場合は、エラーをキャッチできます。

于 2014-04-05T01:50:09.850 に答える