mysqli_fetch_array()什么都不检索

时间:2013-04-23 20:27:30

标签: php mysql sql mysqli

我有一个简单的数据库表“accounts”,包含3个条目:'user','pass'和'ID'。 ID是一个整数。

我正在尝试从表中检索ID并将其存储到$ _SESSION ['id']中,但我没有运气。

以下是代码:

session_start();  

// Checks to see if the input account is valid
$result = mysqli_query($con,"SELECT * FROM accounts 
 WHERE user='$_POST[user]'
 AND pass='$_POST[pass]'");

//Check to see if account exists
if(!mysqli_fetch_array($result))
  {
    $_SESSION['loggedin'] = false;
  }
else
  {
    $_SESSION['loggedin'] = true;
    $_SESSION['user'] = $_POST['user'];
    $id = mysqli_fetch_array($result);
    $_SESSION['id'] = $id['ID'];
    echo $_SESSION['id'];
  }

 //header('Location: index1.php/');

?>

echo $ _SESSION ['id']没有任何内容。我试图回复$ id ['ID']本身,它也不起作用。

在我的index1.php页面上,我设法使用相同的代码检索信息,除了$ result不使用select语句的WHERE和AND子句。

2 个答案:

答案 0 :(得分:1)

您似乎要两次获取数据:一次在if语句中,一次在else中。考虑使用这个:

//Check to see if account exists
if($id!=mysqli_fetch_array($result))
  {
    $_SESSION['loggedin'] = false;
  }
else
  {
    $_SESSION['loggedin'] = true;
    $_SESSION['user'] = $_POST['user'];
    $_SESSION['id'] = $id['ID'];
    echo $_SESSION['id'];
  }

或者这个:

//Check to see if account exists
if(!$result)
  {
    $_SESSION['loggedin'] = false;
  }
else
  {
    $_SESSION['loggedin'] = true;
    $_SESSION['user'] = $_POST['user'];
    $id = mysqli_fetch_array($result);
    $_SESSION['id'] = $id['ID'];
    echo $_SESSION['id'];
  }

答案 1 :(得分:1)

你实际上是在获取前两行(每次调用mysqli_fetch_array()都会得到一行结果),这可能不是你想要的。只需获取一次并重用结果:

// ...

//Check to see if account exists
$row = mysqli_fetch_array($result);
if(!$row)
  {
    $_SESSION['loggedin'] = false;
  }
else
  {
    $_SESSION['loggedin'] = true;
    $_SESSION['user'] = $_POST['user'];
    $_SESSION['id'] = $row['ID'];
    echo $_SESSION['id'];
  }
// ...

正如评论中所提到的,您的代码对SQL注入是开放的。阅读准备好的语句以防止这种情况或手动清理变量(不建议这样做。)。