所以,我一直在学习PDO。到目前为止,老实说,由于执行小任务所需的大量代码,我并不感到印象深刻。但是,如果我能让我的代码高效且可重用,我愿意转换。
我的问题是:我可以使这段代码更有效率吗?通过有效,我的意思是A)占用较少的线,B)运行得更快。我担心我这一切都错了。但是,由于缺乏num_rows()
功能,我想不出更好的方法。
try
{
$sth = $dbh->prepare("SELECT * FROM table_name");
$sth->execute();
if (count($result = $sth->fetchAll()))
{
foreach ($result as $value)
{
// Rows returned! Loop through them.
}
}
else
{
// No rows returned!
}
}
catch (PDOException $e)
{
// Exception!
}
这写得不错吗?
答案 0 :(得分:2)
就我的研究表明,没有。没有办法更简洁或逻辑地重写这个代码 - 它的方式是完全优化的。 :)它很容易使用,所以这绝对不是一件坏事!
答案 1 :(得分:1)
使用PDO::query()发出SELECT COUNT(*)
语句,其语句与预期的SELECT语句相同
然后,使用PDOStatement::fetchColumn()检索将返回的行数
$sql = "SELECT COUNT(*) FROM table_name";
if ($res = $conn->query($sql))
{
/* Check the number of rows that match the SELECT statement */
$res->fetchColumn(); //This will give you the number of rows selected//
}
制作一个通用功能,您需要做的就是根据您的需要发送select count
。通过将$ select除以更多变量,您可以更通用。
function countRows($select)
{
if ($res = $conn->query($select))
{
/* Check the number of rows that match the SELECT statement */
return $res->fetchColumn(); //This will give you the number of rows selected//
}
}
答案 2 :(得分:-1)
不,你需要使用PDO的rowCount方法。
try
{
$sth = $dbh->prepare("SELECT * FROM table_name");
$sth->execute();
if ($sth->rowCount() > 0)
{
while ($result = $sth->fetch())
{
// Rows returned! Loop through them.
}
}
else
{
// No rows returned!
}
}
catch (PDOException $e)
{
// Exception!
}