9

イライラしないようにしていますがmysql_*、PHP では非推奨であることを最近知りました。PDO の使い方を学ぶことにしました。

私はちょうど今日の午後それを見ていて、それを使用してデータベースに接続するのは簡単でしたが、それを使用して行をフェッチし、列名でインデックス付けされた配列として行を保存したかった (関数と同じ方法)mysql_fetch_arrayやりました)。自分の命を救うためにそれを理解することはできません。

明確にするためにコードを投稿します。それは単純なものだと確信しています (すべてのプログラミング エラーは常に単純です)。しかし、私は間違いなく何か間違ったことをしています。

// Connect to the database
$host    = $_PARAM["DatabaseServer"];
$db        = $_PARAM["MainDatabase"];
$dbuser    = $_PARAM["DatabaseUser"];
$dbpass    = $_PARAM["DatabasePass"];
try
{
    $Database = new PDO("mysql:host=$host;dbname=$db", $dbuser, $dbpass);
}
catch (PDOException $e)
{
    echo "There was an unexpected error. Please try again, or contact us with concerns";
}

$stmt = $Database->prepare("SELECT * FROM users WHERE username=?");
$stmt->execute(array($sUserCook));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo $row["username"];
4

2 に答える 2

21

fetchAllクエリのすべての結果を取得します。多くの結果をフェッチするため、インデックス付き配列が得られます。

fetch1行だけが必要な場合に探していることを行います。クエリの結果を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) {}
于 2012-12-26T01:17:36.673 に答える