1

データベース接続に PDO を試しています。どういうわけか、このエラーが発生します..または通知しますが、理由がわからず、名前が出力されません...

注意: 31 行目の (location) での配列から文字列への変換。

     (print $row[0] . "\t";)

どうしてか分かりません?

完全なコード:

         $query = "SELECT naam FROM paginas"; 


    try 
    { 
        $stmt = $db->prepare($query); 
        $result = $stmt->execute(); 
    } 
    catch(PDOException $ex) 
    { 
        die("Failed to run query: " . $ex->getMessage()); 
    } 

    $row = $stmt->fetchALL(); 

     print $row[0] . "\t";

こんにちは、メリジン

4

1 に答える 1

5

PDO::fetchAll()レコードの配列を返します。レコードのタイプは、使用しているフェッチ スタイルによって異なります。

配列の配列を返すPDO のデフォルトのフェッチ スタイルを使用しているためです。あなたの場合、次のようになります。PDO::FETCH_BOTH PDO::fetchAll()

array(2) {
  [0] =>
  array(2) {
    [0] =>
    string(3) "foo"
    'naam' =>
    string(3) "foo"
  }
  [1] =>
  array(2) {
    [0] =>
    string(3) "bar"
    'naam' =>
    string(3) "bar"
  }

  ...
}

したがって、$row[0] は配列です。そのインデックスに対処する必要があります。上記の配列の例でわかるように、次を使用できます。

print $row[0]['naam'] . "\t";

また

print $row[0][0] . "\t";

更新: レコードを一度に取得するのではなく、ループ処理する場合は、 を使用しますPDOStatement::fetch()。このような:

while($row = $stmt->fetch()) {
    print $row['naam'] . "\t";
}

$row現在は 1 次元配列であることに注意してください。これはあなたが望むものかもしれません。

于 2013-02-08T16:44:15.600 に答える