当我开始学习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的提示吗?
感谢。
这是完整的代码:
我尝试转换:
// 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();
我做错了什么?
答案 0 :(得分:4)
我不知道mysql_fetch_array是什么,它看起来类似于PDO :: FETCH
好吧,mysql_fetch_array
是function,它会将结果(来自mysql_query
)提取到数组中。 PDO::FETCH_*
取而代之的是family of constants。
有人可以给我一些关于如何将这个MySQL_转换为PDO的提示吗?
我不想看起来很粗鲁,但你绝对应该RTM:你可以轻松找到proper documentation和examples。
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();
答案 1 :(得分:0)
根据您的代码,您正在使用mysql_fetch_array
并在其中填入数据库中列的名称:
**$row2** = mysql_fetch_array($res2);
$numrows = **$row2['numrows']**;
您可以使用PDO::FETCH_ASSOC
,这样您就可以继续使用列的名称,除此之外您还可以使用列的数值(第1列是数字0,第2列1等)。
我对PDO并不常见,所以请查看其他人的答案。除此之外,我强烈建议您查看从数据库中获取数据的不同方法(_rows,_assoc,_array等)。有很多东西需要学习:)