2017-03-16 65 views
0

我试图为我的网站创建一个登录帐户系统,当用户注册时,我检查数据库中是否已有帐户。我创建了一个名为“check_user_exists”这里的功能是为为什么我的sql准备语句没有给出正确的响应?

function check_account_exists($username, $conn){ 
    if($stmt = $conn->prepare("SELECT * FROM users WHERE username=?")){ 
     $stmt->bind_param('s', $username); 
     $stmt->execute(); 
     echo $stmt->num_rows; 
     if($stmt->num_rows == 1){ 
      return true; 
     }else{ 
      return false; 
     } 
    }else{ 
     //couldn't prepare statement 
     return false; 
    } 
} 

代码然而,当我去运行,这甚至每一次当我知道在数据库中的值已经存在,则返回false。在此之前,我还没有任何MySQL错误,但我检查了错误日志,并且没有显示任何错误。我加了echo stmt->num_rows;,但总是输出0.发生什么事了?

+0

我测试$ stmt是否准备正确,而不是如果$ stmt的值等于sql的准备。 – blendy

+2

@ arif_suhail_123在PHP中,你可以声明变量里面的if语句 – JapanGuy

+0

@ arif_suhail_123它很混乱,但它实践了很多 – JapanGuy

回答

1

好吧,事实证明我需要使用$stmt->store_result();$stmt->execute();这是防止正确的答复。

+0

Ohhh ..对,我不自觉地认为结果被缓冲了,但实际上结果在你做之前可能无法访问。谢谢你提醒我永远不要承担任何事情! –

+0

@FélixGagnon-Grenier这个人真的让我感到困惑,直到我做了更多的研究,并将这一行代码放到我的其他函数login_check中并修复它。因为我100%肯定SQL代码是正确的,并且该数据库表中有该行。我甚至检查了phpMyAdmin,并显示该行。奇怪你需要这样做,但它是有道理的。感谢您的时间和快速回复。 – blendy

相关问题