【问题标题】:mysqli_num_rows from class function errormysqli_num_rows 来自类函数错误
【发布时间】:2014-01-28 15:40:19
【问题描述】:

这是我第一次学习PHP类,我尝试在数据库中进行简单的搜索。
这是我班上的一些脚本:

class DB {
...
function list_query($query) {
    $ns = array();
    $q = mysqli_query($this->con_(), $query);
    while($n = mysqli_fetch_assoc($q)) {
        $ns[] = $n;
    }
    return $ns;
}
...
function num_query($q) {
    $num = mysqli_num_rows($q);
    return $num;
}
...
}

搜索脚本:

$key = "foo";
$qsearch = $db->list_query("SELECT * FROM posts WHERE content LIKE '%".$db->escape_query($key)."%'");

$num = $db->num_query($qsearch);
    if ($num == 0) {
        echo "<h2>not found</h2>";
    } else {
        echo "<h2>result for : ".$key."</h2>";

        foreach($qsearch as $val) {
            echo "<h4>".$val['title']."</h2>";
            echo strip_tags($val['content']);
        }
    }

但 num_query() 函数存在错误。
带有警告:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, array given in class/db.php on line 30.

我已经手动检查了 mysqli_query() 然后使用 num_query() 函数,它运行良好。

对不起我的英语

【问题讨论】:

  • $qlist_query 函数的范围内定义。将$q 分配为全局变量或类属性会很有用。
  • 但我在 escape_query($q) 函数上也使用了 $q,但有一些效果很好

标签: php class mysqli


【解决方案1】:

您的 list_query() 返回数组。而您的 num_query 期望 mysqli_result 作为参数。

所以,当你写$qsearch = $db-&gt;list_query() 时,你得到一个数组;然后将该数组传递给num_query

也许,你的num_query 应该是这样的:

function num_query($result) {
     return count($result);
}

【讨论】:

  • 我在使用 print_r() 后才意识到,如果结果是一个数组。谢谢
  • 其实我想知道,如果你可以简单地使用具有像fetchAll()rowCount() 这样的本机方法的PDO,你为什么要在mysqli 接口周围使用对象包装器?
  • 我对PDO还是有点了解的:)
  • 好吧,相信我,它会给你带来很多好处。围绕 mysqli 编写对象包装器就像重新发明一个方轮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
相关资源
最近更新 更多