現在ログインしているユーザーのデータを取得するこのPHP関数があります。または、訪問者がログインしていないか、user_idとpassword_hashのCookieが無効な場合はfalseを返します。何らかの理由で、$q->fetch()
常にFALSEを返します。
if( $_COOKIE['cuid']!='' && $_COOKIE['cuph']!='' )
{
try
{
$q = $db->prepare( 'SELECT * FROM users WHERE user_id = ? AND password = ?' );
$data = array( $_COOKIE['cuid'], $_COOKIE['cuph'] ); // id and password hash
$q->execute($data);
$num = count( $q->fetchAll() ); // in my case, $num is set to 1
if( $num == 1 )
{
$q->setFetchMode(PDO::FETCH_CLASS, 'User');
$user = $q->fetch(); // $user is set to FALSE for some reason
return $user;
} else {
return FALSE;
}
}
catch( Exception $e )
{
$db->rollBack();
echo 'Error: ' . $e->getMessage();
}
} else {
return FALSE;
}
クエリのプレースホルダーの代わりに正確なデータを使用してそれを実行しても何も変更されず、データベースでそのクエリを直接実行すると、必要に応じて1行が返されます。私がチェックしたところ、$ numは確かに1に等しいのです。なぜFALSEが返されるのかわからない$q->fetch()
ので、ポインタをいただければ幸いです。