6

2列のテーブルがあります。表:ctgtableおよび 列:idおよびctg. mysql_*以前の関数から に完全に移行しているため、愚かな間違い (または知識不足)PDOに直面しています。

質問

ctgテーブルの列全体 (最大で合計 20 行) を整数インデックスの配列に選択したいと考えています。

私の方法

私の意見では、最も近い解決策は次のとおりです。

<?php
    $sth = $dbh->prepare("SELECT id, ctg FROM ctgtable");
    $sth->execute();
    /* Fetch all of the values of the second column */
    $result = $sth->fetchAll(PDO::FETCH_COLUMN, 1);
    var_dump($result);
?>

同じ結果のための他のより短い/より良い代替手段はありますか? または、これが結果を取得するための最良/唯一の方法です。

サンプルテーブル

id      ctg
01     movie
27       tv
64     sports

サンプル結果

Array( 1 => "tv",
    2 => "movie",
    3 => "anime",
    4 => "game",
    5 => "telugu"
);

インデックスは 0 から始まる場合とそうでない場合があります。私には関係ありません。そのような質問を探してみましたが、どれも私の質問に関連しているようには見えませんでした。

4

3 に答える 3

6

お持ちの方法で大丈夫です。ID が必要ないのに、なぜ ID を照会する必要があるのでしょうか?

<?php
    $sth = $dbh->prepare("SELECT ctg FROM ctgtable");
    $sth->execute();
    /* Fetch all of the values in form of a numeric array */
    $result = $sth->fetchAll(PDO::FETCH_ARRAY);
    var_dump($result);
?>

MySQL の制約が少ないほど、処理時間が短縮され、最終的にはより良い結果が得られます。

于 2012-09-16T07:26:37.160 に答える
2

あなたは単に次のことを行うことができます

   <?php
    //connect to db    

    $array = array();//define array

    $query = "SELECT * FROM ctgtable";    
    $result = $pdo->prepare($query);
    $result->execute();

   while ($row = $result->fetch()) {
      $id =  $row['id'];
      $ctg = $row['ctg'];        
      $array[$id] = $ctg;        
  }

 print_r($array);
 //close connection
?>
于 2012-09-15T16:25:23.740 に答える
0

の代わりにfetchColumn()を呼び出すこともできますfetchAll()。呼び出しをチェーンすると、次のようになります。

$entries = $dbh->query("SELECT ctg FROM fruit")->fetchColumn();
于 2012-09-15T16:39:56.050 に答える