Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli_fetch_array()不检索任何内容_Php_Mysql_Sql_Mysqli - Fatal编程技术网

Php mysqli_fetch_array()不检索任何内容

Php mysqli_fetch_array()不检索任何内容,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我有一个简单的数据库表“accounts”,其中有3个条目:“user”、“pass”和“ID”。ID是一个整数 我正试图从表中检索ID并将其存储到$\u会话['ID'],但我运气不好 代码如下: session_start(); // Checks to see if the input account is valid $result = mysqli_query($con,"SELECT * FROM accounts WHERE user='$_POST[user]' AND

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

我正试图从表中检索ID并将其存储到$\u会话['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$\u会话['id']没有任何结果。我尝试回显$id['id']本身,但它也不起作用


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

您似乎在两次获取数据:一次在
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'];
  }

实际上,您正在获取前两行(每次调用
mysqli\u fetch\u 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注入非常开放。仔细阅读准备好的语句以防止这种情况发生,或者手动清理变量(不建议这样做!)。

计算返回的行时会得到什么?mysqli_num_rows($result)在做任何其他事情之前,请先阅读并使用
mysqli
。你在这里做的事显示出你鲁莽的坏习惯,会给你带来严重的麻烦。您无法将
$\u POST
数据放入查询中而不进行转义。我知道我的编码中可能存在漏洞,我将阅读提供的链接,但目前我正在尝试在深入研究保护问题之前了解这个概念。我很感谢您的帮助,“保护问题”的问题是,如果您不使用占位符,您必须在以后找到这些占位符,而且它们可能很难发现。丢失一个就足够了,有人会把你的网站炸开,毁掉它。你犯了一些巨大的错误,在你犯更多错误之前应该先解决。非常感谢。我不知道你不能两次获取数据。这也回答了我在这段代码中遇到的其他问题。