执行fetch时我遇到此函数的问题,但即使在error_log中也没有给出错误。
输出为": - > " (因为这三种方法都没有返回任何错误)
$appBD = new mysqli($hostApp, $userApp, $passApp, $dbApp);
if (mysqli_connect_errno())
die('Error: ' . mysqli_connect_error());
$saltLogin = 'My_salt';
...
...
...
function isValidToken($token)
{
if(!isset($token) || $token==-1)
return false;
global $saltLogin;
global $appBD;
$query = "SELECT 1 FROM Test WHERE Cont is null and Pass is not null and birthDate is not null and SHA2(concat(Cont,Pass,date_format(birthDate, '%d%m%Y'),?), 512) = ?";
if( !$stmt = $appBD->prepare($query) ){ throw new Exception($appBD->error); }
if( !$stmt->bind_param("ss", $saltLogin, $token) ){ throw new Exception($stmt->error); }//i:integer, s:string, d:double, b:blob
if( !$stmt->execute() ){ throw new Exception($stmt->error); }
if( !$stmt->bind_result( $exists ) ){ $stmt->close(); throw new Exception($stmt->error); }
if( !$stmt->fetch() ){ $error = $appBD->error.': '.$stmt->error.' -> '.$stmt->errno; $stmt->close(); throw new Exception($error); }
if( !$stmt->close() ){ throw new Exception($stmt->error); }
return $exists;
}
答案 0 :(得分:-1)
我发现了问题:
如果找不到数据,则fetch可以返回true,false(如果错误)为null。
由于我改变了计算哈希的方法,因此条件为false并返回null,表示它被评估为false。
所以我将代码更改为:
if($stmt->fetch() === false){...}
感谢Jeroen的帮助。
PD:“选择1 ...其中”如果条件为真,则返回1,否则返回1。这是检查凭据是否正确的一种方法。 “1”仅用于测试,实际上它返回用户代码。