-5

当我开始学习 PHP 时,我从未接触过 MySQL_,因为每个人都告诉我从 PDO 开始。

我了解 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_arrayPDOStatament::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,第二列是 1,等等)。

我对 PDO 不是很常见,所以也请看看其他人的答案。除此之外,我强烈建议您看看可以使用哪些不同的方式从数据库中获取数据(_rows、_assoc、_array 等)。有很多东西要学:)

于 2013-04-16T13:18:20.857 回答