不久之前,我正在尝试使用sqlite,试图将我的一些网站移植到使用它而不是MySQL.我对缺少一个计算结果的函数感到困惑,比如PHP的MysqL_num_rows().搜索了一下之后我发现了this mail list,它说(据我所知)sqlite没有这个功能,因为它效率低下.它声明编写需要知道返回多少行的代码是不好的形式.
我通常使用MysqL_num_rows来检查空的返回结果.例如:
$query = "SELECT * FROM table WHERE thing = 'whatever'";
$results = MysqL_query($query);
if (MysqL_num_rows($results)) {
while ($row = MysqL_fetch_array($results)) {
echo "<p>$row[whatever]</p>";
}
} else {
echo "<p>No results found</p>";
}
sqlite社区中对MysqL_num_rows()概念的强烈厌恶让我想知道它是否对PHP中的常规MysqL非常有效.
除了MysqL_num_rows()之外,还有更好的,更可接受的方法来检查PHP中MysqL结果集的大小吗?
编辑:
我不只是使用MysqL_num_rows来获取计数 – 我会使用COUNT查询.在输出所有内容之前,我用它来检查是否有任何结果.这对于显示搜索结果等内容非常有用 – 并不总能保证会有结果.在sqlite世界中,我必须发送一个COUNT查询,检查是否有什么,然后发送SELECT查询以获取所有内容.
解决方法:
如果你在MysqL_fetch_array()中得到了结果,你已经有了一些东西告诉你.如果没有要获取的行(从php.net开始),则返回false.
$query = "SELECT * FROM table WHERE thing = 'whatever'";
$results = MysqL_query($query);
if($results) {
$row = MysqL_fetch_array($results);
if($row) {
do {
echo "<p>{$row[whatever]}</p>";
} while($row = MysqL_fetch_array($results));
} else {
echo "<p>No results found</p>";
}
} else {
echo "<p>There was an error executing this query.</p>";
}