PHP MYSQLi新手问题。获取不返回True

时间:2011-02-28 10:40:14

标签: php mysqli return-value if-statement fetch

我是一个超级新手php的人。刚开始编写脚本一周前。我有一个函数没有返回true的问题,即使数据似乎是正确的。我花了一天时间来寻找答案。

这是缩写的类。

public function verifyPost()
{
 try
 {
  if(!$this->verifyDatabase())
    throw new Exception('Invalid Username Password');

  $this->access = 1;
 }
 catch(Exception $e)
 {
  $this->errors[] = $e->getMessage();
 }
}

public function verifySession()
{
 if($this->sessionExist() && $this->verifyDatabase())
    $this->access = 1;
}

public function verifyDatabase() 
{
 /* connect to db */ 
 $mysqli = new mysqli ("localhost", "user", "password", "world");  

 /* check connection */ 
 if (mysqli_connect_errno()) { 
        printf("Connect failed: %s\n", mysqli_connect_error()); 
        exit(); 
 } 

 /* create prepare statement */ 
 $stmt = $mysqli->prepare("SELECT ID FROM user WHERE id1 = ? AND id2 = ?"); 
 $stmt->bind_param('ss', $this->id1, $this->id2); 

 /* execute prepared statement */ 
 $stmt->execute(); 

 /* bind variables to prepared statement */ 
 $stmt->bind_result($col1); 

 /* check user info in db and assign returned ID to variable*/ 
 if(($stmt->fetch()) != 0) {
        $this->userid = $col1; 
        return true;
 } else {
        return false;
 }

 /* close statement and connection */ 
 $stmt->close(); 

 /* close connection */ 
 $mysqli->close();
}

(我没有输入真正的数据库连接信息)

由于某种原因,$ access未在verifySession()中设置.bc verifyDatabase()不返回true。 VerifyDatabase()运行正常。它在Db中找到User / Pass并且不会抛出异常。问题出现在IF语句中。我在这里通过注释掉整个IF语句来隔离它,除了“return true;”和verifySession()将$ access设置为1。

现在我认为它可能是fetch(),所以我尝试了num_rows()而仍然没有返回true。

我希望这是有道理的。如果我需要详细说明,请告诉我。任何帮助深表感谢!!谢谢!

1 个答案:

答案 0 :(得分:3)

$ stmt-> fetch可以返回三个值,TRUE,FALSE和NULL。

TRUE =获取成功和数据 FALSE =发生错误 NULL =不存在行/数据或发生数据截断

你应该使用triple =运算符来执行类型检查,例如

if($stmt->fetch() === true) {
  $this->userid = $col1; 
  return true;
} else
  return false;

或者,因为这个FALSE和NULL永远不会评估为true,所以你可以写

if($stmt->fetch()) {