2012-12-26 4 views
8

私は不満を募らないようにしていますが、最近はmysql_*がPHPで償却されることを学びました。私はPDOの使い方を学ぶことに決めました。私は今午後それを見ていて、それを使ってデータベースに接続するのは簡単でしたが、それを使って行をフェッチし、その列を列名で索引付けされた配列として保存したかったのですmysql_fetch_arrayしました)。私は人生を救うためにそれを理解できません。私は明確にするために私のコードを投稿し、私はそれが何か簡単である(すべてのプログラミングエラーは常に単純です)確信していますが、私は間違って何か間違いをしています。PDOを使用して行をフェッチする方法

ありがとうございました。

アレックス

+6

ここで構文の強調表示が見えますか?エラーメッセージが表示されましたか?そうでない場合は、error_reportingを有効にしましたか? – mario

+2

'prepare()'行には引用符がありませんが、おそらくそれを知っていたでしょう。 –

+2

あなたの手伝いをするためのエラーメッセージが表示されない場合は、プログラミングがイライラします。エラーを表示するようにphpを設定する必要があります。 – goat

答えて

19

fetchAllそれは言うことありません:それは、クエリのすべての結果をフェッチします。それは多くの結果を取得するので、あなたはインデックス配列を取得します。

fetch 1つの行だけが必要な場合は、クエリーの1つの結果がフェッチされます。 mysql_*コードをPDOに変換する場合、最も簡単な方法はmysql_fetch_assocの代わりにこのメソッドを使用することです。

は、あなたはまだfetchAllでつもりなら:あなたのコードは、おそらく次のようになります。

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
foreach ($rows as $row) { 
    echo $row['username']; 
} 

私が言ったように、あなただけのPDOコードにレガシーコードを変換している場合、それがより簡単かもしれませんちょうど準備された文にすべてのクエリを変更し、次のように置き換えます。

  • mysql_fetch_assoc($result)
    - >$stmt->fetch(PDO::FETCH_ASSOC)
  • mysql_num_rows($result)
    - >$stmt->rowCount()
  • while ($row = mysql_fetch_assoc($result)) {}
    - >foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {}
+0

それは意味があります、私はあなたの迅速な対応に感謝し、私はあなたのアドバイスを使用します。私はコードを変更し、それは私にエラーを与えていません致命的なエラー:定義されていないメソッドを呼び出すデータベース::準備()行に\ xxxx.phpで。なぜそれが未定義であると私に伝えているのですか?ありがとうございます – Alex

+0

私はあなたの "データベース"クラスはPDOオブジェクトではないと推測しています。そのため、あなたは準備できません()。 –

0

使用

$row = $stmt->fetch(PDO::FETCH_ASSOC); 

あなたが最初のクエリの結果を取得します。

関連する問題