这两行PHP代码是什么意思?

时间:2019-05-28 15:43:24

标签: php mysql sql database mysqli

如果用户在登录页面的“密码”和“登录”字段中输入正确的信息,则我目前正在编写脚本来登录用户。该脚本可以正常运行,但是我实际上不知道这两行代码对整体用户体验的意义和作用。

我即将参加考试,我必须解释代码的含义,如果你们通过解释下面两行代码的作用来帮助我,那将是绝对令人惊讶的。这是完整的脚本:

<?php  

require('db_connect.php');

if (isset($_POST['user_id']) and isset($_POST['user_pass'])) {

    $username = $_POST['user_id'];
    $password = $_POST['user_pass'];

    $query = "SELECT * FROM dataforlogin WHERE username='$username' and password='$password'";

    $result = mysqli_query($connection, $query) or die(mysqli_error($connection));
    $count = mysqli_num_rows($result);

    if ($count == 1) {

        header("location: ../staudal/dashboard/index.php");

    } else {

        echo "Fail";

  }
}

?>

我难以理解的两行代码是:

$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
$count = mysqli_num_rows($result);

他们做什么,为什么?

4 个答案:

答案 0 :(得分:12)

这是一个好问题,因为这些行大多是错误的或无用的。

应该是这样

$stmt = $mysqli->prepare("SELECT * FROM dataforlogin WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();

if ($user && password_verify($password, $user['password']))
{
    // write some info into the session
    header("location: ../staudal/dashboard/index.php");
    exit;
} else {
    echo "invalid";
}
  • 在第一行中,我们正在准备sql查询,并在问号应放置变量的位置放置问号(因此称为占位符)。
  • 在第二行中,我们将实际变量绑定到占位符,因此它将被发送到与查询分开的mysql服务器,并且它们将无法干预。
  • 然后实际执行查询。
  • 然后我们得到返回的行。
  • 然后我们要同时检查两件事,
    • 我们的查询是否返回任何行
    • 以及从表单发送的密码是否与使用password_verify()函数存储在数据库中的密码相同
  • 其余与您的代码相同,除了两点
    • 在重定向用户之前,您应该在会话中写入一些有关他们的信息,以便在其他页面上识别出他们
    • 在发送Location标头后添加exit是一个好习惯。

希望这些解释对您的老师来说足够

  

很严重,这个问题应该提高人们对PHP教育状况的认识。无论是在线还是离线,大多数资源都在教授PHP3,但对于不推荐使用的功能仅作了一些小改动。但是这种方法在很多方面都是错误的,但仍保持不变。

答案 1 :(得分:0)

  • $result = mysqli_query($connection, $query) or die(mysqli_error($connection));
  • 这将执行MySQL查询,例如SELECT * FROM table WHERE id = ?,然后保存结果。否则,如果查询失败,它将返回错误消息。

  • $count = mysqli_num_rows($result);
  • 这只是返回查询返回的行数。

    答案 2 :(得分:0)

    首先,我想说的是,请使用准备好的声明。

    $result = mysqli_query($connection, $query) or die(mysqli_error($connection));
    

    mysqli_query()函数对数据库执行查询,$connection变量打开与您已在 db_connect.php 中创建的MySQL服务器的新连接,并检查是否连接建立与否。否则,将运行die()函数。它用于打印消息并退出当前的php脚本。

    $count = mysqli_num_rows($result);
    

    mysqli_num_rows()函数将返回结果集中的行数,并将该数存储到$count变量中。

    希望这对您有帮助

    答案 3 :(得分:0)

    我是一名初级开发人员,但我希望此答案对您的代码有所帮助:

    1. $ result = mysqli_query($ connection,$ query)或die(mysqli_error($ connection));

      • $ result是一个php变量

      • mysqli_query($ connection,$ query)意味着mysqli_query将使用db_connect.php中声明的数据库连接数据库来运行查询[$ query =“ SELECT * FROM dataforlogin WHERE username ='$ username'和password ='$ password'“;]

      • 或die(mysqli_error($ connection));表示如果mysqli_query找不到指定的数据库或表,在这种情况下(dataforlogin),它将显示在db_connect.php

      • 中指定的连接错误。
    2. $ count = mysqli_num_rows($ result);

      • $ count是一个php变量

      • mysqli_num_rows($ result);表示在运行mysqli_query($ connection,$ query)时,$ count等于在$ result的表(dataforlogin)中找到的行数。

    注意:请避免使用---或die(mysqli_error($ connection)行,因为这可能会阻止页面加载,这是不必要的。