所以,我有这个:
$user = $db->prepare("SELECT * FROM `users` WHERE LL_IP='" . $_SERVER['REMOTE_ADDR'] . "'");
$user->execute();
while($userDATA = $user->fetch(PDO::FETCH_ASSOC)) {
if( userDATA['LL_IP'] == $_SERVER['REMOTE_ADDR']) {
echo "Logged in";
}
else {
echo "Register / Login";
}
}
如果找不到$userDATA['LL_IP']
,我正试图把它拿到哪里。然后它执行else
语句,但由于某种原因它不起作用。
我也试过了:
elseif($userDATA['LL_IP'] == false) {
echo "Register / Login";
}
但这也不起作用。
答案 0 :(得分:2)
如果您只想检查是否找到了行,可以使用if
语句替换该循环:
if($userDATA = $user->fetch(PDO::FETCH_ASSOC))
{
echo "Logged in";
}
else
{
echo "Register / Login";
}
答案 1 :(得分:1)
你的逻辑是错误的。您已经仅查询LL_IP
等于$_SERVER['REMOTE_ADDR']
的情况。为什么期望在你的if条件不匹配的情况下转换结果。
在我看来,在这种情况下您需要做的就是检查结果集中返回的记录数是否大于1.
顺便说一下,在查询中使用它之前至少应该转义$_SERVER['REMOTE_ADDR']
,或者更好,因为你已经在使用预准备语句,你可以使用参数化值。
你的逻辑应该是这样的:
// specify maybe a primary key field in query. No need for SELECT *
$query = "SELECT COUNT(user_id) FROM `users` WHERE LL_IP = :ip_address LIMIT 1";
$user->prepare($query);
$user->bindParam(':ip_address', $_SERvER['REMOTE_ADDR'], PDO::PARAM_STR]);
$user->execute();
if('1' === $user->fetchColumn(0)) {
// logged in
} else {
// not logged in
}
我同意@jeroen上面的评论,你真的不应该依赖IP地址来确定任何类型的登录状态。 IP地址可能会无法预测地发生变化(特别是对于移动用户而言)。
答案 2 :(得分:0)
$user = $db->prepare("SELECT * FROM `users` WHERE LL_IP='" . $_SERVER['REMOTE_ADDR'] . "'");
$user->execute();
if ($user->fetchColumn() > 0) {
// logged in
} else {
// not logged in
}
The manual(参见示例#2)说要使用fetchColumn