PHP:sql错误但没有给出错误

时间:2014-11-20 16:15:28

标签: php mysqli

执行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;
}

1 个答案:

答案 0 :(得分:-1)

我发现了问题:

如果找不到数据,则fetch可以返回true,false(如果错误)为null。

由于我改变了计算哈希的方法,因此条件为false并返回null,表示它被评估为false。

所以我将代码更改为:

if($stmt->fetch() === false){...}

感谢Jeroen的帮助。

PD:“选择1 ...其中”如果条件为真,则返回1,否则返回1。这是检查凭据是否正确的一种方法。 “1”仅用于测试,实际上它返回用户代码。