繁体   English   中英

计算OOP PHP中返回行的数量

[英]Count number of returned rows in OOP PHP

我正在学习使用MySQL的OOP PHP。 我试图运行一个应该打印返回的行数的查询。 我的php代码如下:

$con=  mysqli_connect('localhost','root','','dealinte_cms') or die(mysqli_error());
$email="joy1@gmail.com";
if($r=$con->prepare("SELECT * FROM user WHERE email=? ")){
$r->bind_param("s",$email);
    if(!$r->execute()){
        echo mysqli_errno($con);
    }
    else{
        $rowCount=$r->num_rows;
        echo $rowCount;
    }
}

在我的数据库中,电子邮件是4行,所以它应该打印4,但它显示0

我的代码有什么问题?

您必须存储结果

 $r->store_result();

检查行数之前 ,也是如此。 请参阅手册页上的此注释

请注意,对于有时会错过阅读此功能的重要手册条目的人:

如果您不使用mysqli_stmt_store_result(),并且immediatley在执行预准备语句后调用此函数,则此函数通常会返回0,因为它无法知道结果集中有多少行,因为结果集未保存在内存中然而。

小费

由于您正在使用mysql学习OOP PHP,因此请务必注意,您为mysql创建的连接采用过程式语法。 虽然在PHP中你可能会侥幸逃脱,但在许多其他语言中你不会。 为什么不立即将其转换为OOP语法?

$con= new mysqli('localhost', 'my_user', 'my_password', 'my_db');

您需要使用store_result()存储结果。 在这里阅读更多:

所以你的代码应该是这样的:

<?php
$con=  mysqli_connect('localhost','root','','dealinte_cms') or die(mysqli_error());
$email="joy1@gmail.com";
if($r=$con->prepare("SELECT * FROM user WHERE email=? ")){
$r->bind_param("s",$email);
    if(!$r->execute()){
        echo mysqli_errno($con);
    }
    else{
        $r->store_result();
        $rowCount=$r->num_rows;
        echo $rowCount;
    }
}
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM