我是一个超级新手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。
我希望这是有道理的。如果我需要详细说明,请告诉我。任何帮助深表感谢!!谢谢!
答案 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()) {