0

最初のコード セットでは配列を出力できますが、2 番目の段落は配列を変数に格納するためのものですが、これは何か提案が機能していませんか? 配列は空ですか?

 $stmt = $conn->prepare("SELECT admin_name FROM adminuser_tbl");
    if ($stmt->execute()) {
       while ($row = $stmt->fetch()) {
    print_r($row);
    }
  }

以下では動作しません

 $stmt = $conn->prepare("SELECT admin_name, adminuser_id FROM adminuser_tbl");
      if ($stmt->execute()) {
          $user_list = array();
     while ($row = $stmt->fetch()) { 
          $user_list[$row->adminuser_id] = $row->admin_name; 
     }
   }

最初の段落から配列の結果を出力すると、それらはすべて[0]に設定されます???

Array ( [admin_name] => User1 [0] => User1 ) Array ( [admin_name] => User2 [0] => User2 ) Array ( [admin_name] => User3 [0] => User3 ) Array ( [admin_name] => User4 [0] => User4 ) 
4

1 に答える 1

2

行をオブジェクトとしてフェッチする場合は、フェッチ モードを設定する必要があります。デフォルトはPDO::FETCH_BOTH、整数と名前付きキーを持つ配列を提供するものです。(print_r の出力を参照してください)

$stmt = $conn->prepare("SELECT admin_name, adminuser_id FROM adminuser_tbl");
if ($stmt->execute()) {
    $stmt->setFetchMode(PDO::FETCH_OBJ);
    $user_list = array();
    while ($row = $stmt->fetch()) {
        $user_list[$row->adminuser_id] = $row->admin_name;
    }
}

または、PDOStatement が Traversable インターフェースを実装しているため、foreach ループを使用するだけです。

$stmt = $conn->prepare("SELECT admin_name, adminuser_id FROM adminuser_tbl");
if ($stmt->execute()) {
    $stmt->setFetchMode(PDO::FETCH_OBJ);
    $user_list = array();
    foreach ($stmt as $row) {
        $user_list[$row->adminuser_id] = $row->admin_name;
    }
}

他のフェッチ モードについては、ここを参照してください: pdo.constants

于 2013-08-01T12:14:24.070 に答える