这是mysqli中的一个bug-部分结果

kokeuurv  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(233)

mysqli prepare语句在执行时只返回部分结果,即在fetch()$hash,$type保留其值,但$userid保持为空,此问题只出现在prepared语句中。

if($statement=$this->db->prepare("SELECT `id`,`password`,`type` FROM `login` WHERE `username`=?")){
   $statement->bind_param("s",$username);
   if($statement->execute()){
     $statement->bind_result($userId,$hash,$type);
     if($statement->fetch()){
       if(password_verify($password, $hash)){
         $this->userId=$userId;
         if($type=='u')
            return true;
       }else {
         $this->error(11);
       }
     }else
       $this->error(5);
   }else
    $this->error(4);
 }else
   $this->error(3);
rbpvctlc

rbpvctlc1#

我通过把id转换成char来解决这个问题

SELECT CAST(`id` AS CHAR),`password`,`type` FROM `login` WHERE `username`=?

但还是不知道为什么会这样。猜猜mysqli的bug。

相关问题