我正在学习使用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
我的代码出了什么问题?
答案 0 :(得分:3)
您必须store result
$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');
答案 1 :(得分:0)
您需要使用store_result()
存储结果。阅读更多here:
所以你的代码应该是这样的:
<?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;
}
}
?>