Php mysqlioop返回null

Php mysqlioop返回null,php,oop,mysqli,Php,Oop,Mysqli,谁能告诉我我的代码出了什么问题: class sub_category { private $con; function __construct() { $this->con = new mysqli("localhost", "root", "", "whatever"); } function show_all() { $per_page=5; if(isset($_GET['page']

谁能告诉我我的代码出了什么问题:

class sub_category
{
    private $con;
    function __construct()
    {
        $this->con = new mysqli("localhost", "root", "", "whatever");
    }

    function show_all()
    {
        $per_page=5;
        if(isset($_GET['page']))
        {
            $page = $_GET['page'];
        }
        else
        {
            $page = 1;
        }

        $start_from = ($page-1)*$per_page;

        $sql = "SELECT sub_kategori.id_sub_kategori, kategori.nama_kategori, sub_kategori.nama_sub_kategori FROM sub_kategori INNER JOIN kategori ON kategori.id_kategori = sub_kategori.id_kategori ORDER BY sub_kategori.id_sub_kategori LIMIT ?, ?";
        $stmt = $this->con->prepare($sql);
        $stmt->bind_param('ii', $start_from, $per_page);
        $stmt->execute();
        $stmt->bind_result($id, $namecat, $cat);
        while($stmt->fetch())
        {
            echo "<tr>";
            echo "<td>$id</td>";
            echo "<td>$namecat</td>";
            echo "<td>$cat</td>";
            echo "<td><a href='javascript:'>Update</a></td>";
            echo "<td><a href='sub_category.php?ghgfh=$id'>Delete</a></td>";
            echo "<td><a href=''>Report</a></td>";
            echo "</tr>";
        };
        $stmt->close();
        $page_sql = "SELECT sub_kategori.id_sub_kategori, kategori.nama_kategori, sub_kategori.nama_sub_kategori FROM sub_kategori INNER JOIN kategori ON kategori.id_kategori = sub_kategori.id_kategori ORDER BY sub_kategori.id_sub_kategori";
        $stmt_page = $this->con->query($page_sql);
        $total_record = $stmt_page->num_rows;
        $total_page = ceil($total_record/$per_page);
        echo "</tbody>";
        echo "</table>";
        echo "<center>";
        echo "<ul class='pagination'>";
        echo "<li><a href=sub_category.php?page=1>First Page</a></li>";
        for($i=1;$i<=$total_page;$i++)
        {
            if(isset($_GET['page']))
            {
                if($i==$_GET['page'])
                {   
                    echo "<li class='active'><a href=sub_category.php?page=$i>$i</a></li>";
                }
                else
                {
                    echo "<li><a href=sub_category.php?page=$i>$i</a></li>";
                }
            }
            else
            {
                echo "<li><a href=sub_category.php?page=$i>$i</a></li>";
            }
        }
        echo "<li><a href=sub_category.php?page=$total_page>Last Page</a></li>";
        echo "</ul>";
        echo "</center>";
        $stmt_page->close();
    }

    function show($nama_sub_kategori)
    {

        $per_page=5;
        if(isset($_GET['page']))
        {
            $page = $_GET['page'];
        }
        else
        {
            $page = 1;
        }

        $start_from = ($page-1)*$per_page;

        $nama_sub_kategori = "%$nama_sub_kategori%";
        $sql = "SELECT sub_kategori.id_sub_kategori, kategori.nama_kategori, sub_kategori.nama_sub_kategori FROM sub_kategori INNER JOIN kategori ON kategori.id_kategori = sub_kategori.id_kategori WHERE sub_kategori.id_sub_kategori LIKE ? OR sub_kategori.nama_sub_kategori LIKE ? OR kategori.nama_kategori LIKE ? ORDER BY sub_kategori.id_sub_kategori LIMIT ?, ?";
        $stmt = $this->con->prepare($sql);
        $stmt->bind_param('sssii', $nama_sub_kategori, $nama_sub_kategori, $nama_sub_kategori, $start_from, $per_page);
        $stmt->execute();
        $stmt->bind_result($id, $namecat, $cat);
        while($stmt->fetch())
        {
            echo "<tr>";
            echo "<td>$id</td>";
            echo "<td>$namecat</td>";
            echo "<td>$cat</td>";
            echo "<td><a href=''>Update</a></td>";
            echo "<td><a href='sub_category.php?ghgfh=$id'>Delete</a></td>";
            echo "<td><a href=''>Report</a></td>";
            echo "</tr>";
        };
        $stmt->close();
        $page_sql = "SELECT count(*) as total FROM sub_kategori INNER JOIN kategori ON kategori.id_kategori = sub_kategori.id_kategori WHERE sub_kategori.id_sub_kategori LIKE ? OR sub_kategori.nama_sub_kategori LIKE ? OR kategori.nama_kategori LIKE ? ORDER BY sub_kategori.id_sub_kategori";
        $stmt_page = $this->con->prepare($page_sql);
        $stmt_page->bind_param('sss', $nama_sub_kategori, $nama_sub_kategori, $nama_sub_kategori);
        $stmt_page->execute();
        $stmt_page->bind_result($row);
        $total_record = $row;
        echo $total_record;
        $total_page = ceil($total_record/$per_page);
        echo "</tbody>";
        echo "</table>";
        echo "<center>";
        echo "<ul class='pagination'>";
        echo "<li><a href=sub_category.php?page=1>First Page</a></li>";
        for($i=1;$i<=$total_page;$i++)
        {
            if(isset($_GET['page']))
            {
                if($i==$_GET['page'])
                {   
                    echo "<li class='active'><a href=sub_category.php?page=$i>$i</a></li>";
                }
                else
                {
                    echo "<li><a href=sub_category.php?page=$i>$i</a></li>";
                }
            }
            else
            {
                echo "<li><a href=sub_category.php?page=$i>$i</a></li>";
            }
        }
        echo "<li><a href=sub_category.php?page=$total_page>Last Page</a></li>";
        echo "</ul>";
        echo "</center>";
        $stmt_page->close();
    }
 }
类子类
{
私人$con;
函数_u构造()
{
$this->con=newmysqli(“localhost”、“root”、“无论什么”);
}
函数show_all()
{
每页$5;
如果(isset($_GET['page']))
{
$page=$_GET['page'];
}
其他的
{
$page=1;
}
$start_from=($page-1)*$每页;
$sql=“选择sub_kategori.id_sub_kategori,kategori.nama_kategori,sub_kategori.nama_sub_kategori,从sub_kategori内部连接kategori上的kategori.id_kategori=sub_kategori.id_kategori按sub_kategori.id_kategori限制的kategori顺序,”;
$stmt=$this->con->prepare($sql);
$stmt->bind_param('ii',$start_from,$per_page);
$stmt->execute();
$stmt->bind_result($id、$namecat、$cat);
而($stmt->fetch())
{
回声“;
回显“$id”;
回显“$namecat”;
回声“$cat”;
回声“;
回声“;
回声“;
回声“;
};
$stmt->close();
$page_sql=“选择sub_kategori.id_sub_kategori,kategori.nama_kategori,sub_kategori.nama_sub_kategori,从sub_kategori.id_kategori上的内部连接kategori=sub_kategori.id_kategori按sub_kategori.id_sub_kategori排序”;
$stmt\u page=$this->con->query($page\u sql);
$total\u record=$stmt\u page->num\u行;
$total_page=ceil($total_record/$per_page);
回声“;
回声“;
回声“;
回声“
    ”; 回声“
  • ”; 对于($i=1;$iclose(); } 功能展示($nama_sub_kategori) { 每页$5; 如果(isset($_GET['page'])) { $page=$_GET['page']; } 其他的 { $page=1; } $start_from=($page-1)*$每页; $nama_sub_kategori=“%$nama_sub_kategori%”; $sql=“选择sub_kategori.id_sub_kategori,kategori.nama_kategori,sub_kategori.nama_sub_kategori从sub_kategori内部加入kategori.id_kategori=sub_kategori.id_kategori,其中sub_kategori.id_sub_kategori LIKE?或sub_kategori kategori.nama_sub_kategori_kategori LIKE?”或kategori.nama_kategori; $stmt=$this->con->prepare($sql); $stmt->bind_param('sssii',$nama_sub_kategori,$nama_sub_kategori,$nama_sub_kategori,$nama_sub_kategori,$start_from,$per_page); $stmt->execute(); $stmt->bind_result($id、$namecat、$cat); 而($stmt->fetch()) { 回声“; 回显“$id”; 回显“$namecat”; 回声“$cat”; 回声“; 回声“; 回声“; 回声“; }; $stmt->close(); $page_sql=“选择count(*)作为总计,从kategori.id_kategori=sub_kategori.id_kategori其中sub_kategori.id_sub_kategori LIKE?或sub_kategori.nama_sub_kategori LIKE?或kategori.nama_kategori LIKE?按sub_kategori.id_kategori订购”; $stmt\u page=$this->con->prepare($page\u sql); $stmt_page->bind_param('sss',$nama_sub_kategori,$nama_sub_kategori,$nama_sub_kategori,$nama_sub_kategori); $stmt_页面->执行(); $stmt\u页面->绑定\u结果($row); $total_record=$row; echo$total_记录; $total_page=ceil($total_record/$per_page); 回声“; 回声“; 回声“; 回声“
      ”; 回声“
    • ”; 对于($i=1;$iclose(); } }
show_all()函数工作得非常好!它显示数据和分页没有问题

show()函数向我显示数据它也在工作!但是分页给了我空结果

我是说

echo$总记录

它给了我空分页!我的代码有问题吗?

在列中添加一个名称(例如total):

 SELECT count(*) as total FROM sub_kategori ....
然后只回显值:

echo $row->total

也许我遗漏了一些明显的东西,因为我没有在php中以这种方式使用$this;也就是说,指定对特定类之外的全局变量的访问。当跨函数共享变量时,使用$global指定共享(在本例中为con)变量。

在showAll函数中,您设置$total_record=$stmt_page->num_rows;在第二个(show)函数中,您设置$total_record=$row;其中$row似乎尚未初始化…因此NULL是正确的。

$stmt_page=$this->con prepare($page_sql);
更改为
$stmt page=$con->prepare($page\sql)
不,它现在给了我一个错误:(注意:第108行C:\xampp\htdocs\whatever\login\admin\sql\sub_category.php中的未定义变量:con致命错误:无法访问第108行C:\xampp\htdocs\whatever\login\admin\sql\sub_category.php中的空属性顺便说一句,我将$con变量放在构造函数中,它正在处理其他函数,但不处理此函数。)第一:(如果你想让一个函数返回一些东西,请使用
return
not
echo
。不,对不起,我不想返回任何值,只想显示它。在echo之前做一个var_dump($row),告诉我它打印什么。不,不是那样的。我只写“$row”,因为我已经绑定了“$row”查询中“count(*)的结果变量,这是mysqli bind result从执行的查询中获取值的方式。我使用“count(*)和bind_result,因为mysqli中的bind_参数不支持num_行。对,所以在您的示例中(感谢提高绑定),将$row绑定到结果集。因此,要获取行数,您是否希望使用$row->num_rows而不仅仅是$row?mysqli中的bind_参数不支持num_rows,这就是为什么我必须使用“count(*)和bind_result。