-5

私が PHP を学び始めたとき、PDO から始めるようにみんなに言われたので、MySQL_ に触れたことはありませんでした。

PDO のフェッチ、実行などについて知っています。しかし、これを PDO に変換する方法がよくわかりません。

これはページネーション システムであり、その一部です。

// counting the offset
$sql = ("SELECT * FROM comments LIMIT $offset, $rowsPerPage");
$res = mysql_query($sql) or die(mysql_error());

// how many rows we have in database
$sql2  = "SELECT COUNT(comment_id) AS numrows FROM comments";
$res2  = mysql_query($sql2) or die(mysql_error());
$row2  = mysql_fetch_array($res2);
$numrows = $row2['numrows'];

// print the random numbers
while($row = mysql_fetch_array($res))
{
    //Echo out your table contents here.

    echo $row[1].'<BR>';
    echo $row[2].'<BR>';
    echo '<BR>';
}

mysql_fetch_array が何であるかはわかりません。PDO::FETCH に似ているように見えますが、実際には取得できません..

この MySQL_ を PDO に変換する方法について、いくつかのヒントを教えてもらえますか?

ありがとう。

これは完全なコードです:

http://pastebin.com/hg1Cd246

私の変換の試み:

// counting the offset
$sql = $pdo->prepare("SELECT * FROM comments LIMIT $offset, $rowsPerPage");
$res = $sql->execute();

// how many rows we have in database
$sql2  = $pdo->prepare("SELECT COUNT(comment_id) AS numrows FROM comments");
$res2  = $sql2->execute();
$row2  = $res2->fetchAll();
$numrows = $row2['numrows'];

// print the random numbers
while($row = $res2->fetchAll())
{
    //Echo out your table contents here.

    echo $row[1].'<BR>';
    echo $row[2].'<BR>';
    echo '<BR>';
}

しかし、このエラーが発生します:

致命的なエラー: 非オブジェクトでのメンバー関数 fetchAll() の呼び出し

この行: $row2 = $res2->fetchAll();

私は何を間違えましたか?

4

2 に答える 2

4

mysql_fetch_array が何であるかはわかりませんが、PDO::FETCH に似ています。

は、 ( からの) 結果を配列にフェッチmysql_fetch_arrayする関数です。代わりに、定数のファミリですmysql_queryPDO::FETCH_*


この MySQL_ を PDO に変換する方法について、いくつかのヒントを教えてもらえますか?

失礼に思われたくはありませんが、RTM を使用することをお勧めします。適切なドキュメントを簡単に見つけることができます。


fetchAll() は mysql_fetch_array と同じ働きをしますか?

mysql_fetch_arrayドキュメントの両方を見てPDOStatament::fetchAll、自分でこれに答えることができます。注意してください:リンクされたドキュメントページでmysql_fetch_array、明示的に次のように述べています:

この関数の代替には次のものがあります: [...] PDOStatement::fetch()


次のエラーが表示されます: 致命的なエラー: 非オブジェクトでメンバー関数 fetchAll() を呼び出します

これ:

$res2  = $sql2->execute();
$row2  = $res2->fetchAll();

execute()ブール値を返すため、そのエラーが発生しています。経由で結果を取得するには、 (あなたの場合は)でfetchAll()呼び出す必要があります。これは正しいコードです:PDOStatament$sql2

$sql2->execute();
$row2  = $sql2->fetchAll();
于 2013-04-16T13:12:13.293 に答える
0

あなたのコードによるとmysql_fetch_array、データベース内の列の名前を使用して入力します。

**$row2**  = mysql_fetch_array($res2);
$numrows = **$row2['numrows']**;

列の名前を引き続き使用できるように使用でき、PDO::FETCH_ASSOCそれに加えて、列の数値を使用できます(最初の列は番号0、2番目の列は1など)。

私はPDOにはあまり慣れていないので、他の人からの回答も見てください。それに加えて、データベースからデータを取得するために使用できるさまざまな方法 (_rows、_assoc、_array など) を確認することを強くお勧めします。学ぶことがたくさんあります:)

于 2013-04-16T13:18:20.857 に答える