微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP-Mysqli准备的Stmt返回0 num_rows

救命.我得到0 num_rows,但是如果我在控制台中执行查询,我会得到结果.我对准备好的stmts有点陌生.这是我的代码

数据库连接类:

class DbConnection {
const  HOST = "localhost";
const  USR = "root";
const  PWD = "";
const  DB = "club_db";
}

登录类别:

class UsrLogin extends DbConnection {

private $conn; /*db connector*/

/*login vars*/
private  $usr;
private  $pwd;

/*ctrl var*/
public $AccessGranted = false;

function __construct($username,$password){
    /*initialize db connection*/
    $this->conn = new MysqLi(DbConnection::HOST,DbConnection::USR,DbConnection::PWD,DbConnection::DB);
    /*set login vars*/
    $this->usr = $username;
    $this->pwd = $password;

}

public function login(){
    $sql = "SELECT * FROM sys_usr WHERE uid = ? AND passwd = ?";
    $stmt = $this->conn->prepare($sql);
    $stmt->bind_param("ss", $usr,$pwd);

    $usr = $this->usr;
    $pwd = $this->pwd;

    $stmt->execute();

    echo  $stmt->num_rows;
}
}

解决方法:

我认为这里给出的两个答案不正确,但我想我知道问题出在哪里.

如前所述,首先,不需要在绑定变量之前为变量赋值.那根本不是真的.这让我很生气,因为我在这里一遍又一遍地阅读了关于stackoverflow的内容……及其错误.只是.错误.如果是这样,您将无法执行具有不同值的多个准备好的语句.即使它的旧时和很多人不喜欢在这里看到它,W3的一个链接
https://www.w3schools.com/php/php_mysql_prepared_statements.asp它表明您正在尝试的事情是完全可能的,并且还表明您使用准备好的语句的可能性.

所以,现在到您的问题:

您在做什么完全没问题.但是,您还缺少另一件事,这就是导致错误的原因.缺少的store_result()函数.

给这个代码一个机会,并告诉我它是否有效:

public function login(){
    $sql = "SELECT * FROM sys_usr WHERE uid = ? AND passwd = ?";
    $stmt = $this->conn->prepare($sql);
    $stmt->bind_param("ss", $usr,$pwd);

    $usr = $this->usr;
    $pwd = $this->pwd;

    $stmt->execute();
    $stmt->store_result(); // Quite sure you need this to perform a num_rows...
    echo  $stmt->num_rows;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐