将此MySQL_ *转换为PDO

时间:2013-04-16 13:08:46

标签: php mysql pdo

当我开始学习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-&gt; fetchAll();

我做错了什么?

2 个答案:

答案 0 :(得分:4)

  

我不知道mysql_fetch_array是什么,它看起来类似于PDO :: FETCH

好吧,mysql_fetch_arrayfunction,它会将结果(来自mysql_query)提取到数组中。 PDO::FETCH_*取而代之的是family of constants


  

有人可以给我一些关于如何将这个MySQL_转换为PDO的提示吗?

我不想看起来很粗鲁,但你绝对应该RTM:你可以轻松找到proper documentationexamples


  

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();

答案 1 :(得分:0)

根据您的代码,您正在使用mysql_fetch_array并在其中填入数据库中列的名称:

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

您可以使用PDO::FETCH_ASSOC,这样您就可以继续使用列的名称,除此之外您还可以使用列的数值(第1列是数字0,第2列1等)。

我对PDO并不常见,所以请查看其他人的答案。除此之外,我强烈建议您查看从数据库中获取数据的不同方法(_rows,_assoc,_array等)。有很多东西需要学习:)