【发布时间】:2019-10-14 04:39:07
【问题描述】:
如果用户在登录页面的密码和登录字段中键入正确的信息,我目前正在编写一个脚本来登录用户。该脚本运行良好,但我实际上并不知道这两行代码对整体用户体验的意义和作用。
我很快就要参加考试,我必须解释代码的含义,如果你们帮助我解释下面两行代码的作用,那将是绝对令人惊奇的。这是完整的脚本:
<?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);
他们做什么以及为什么?
【问题讨论】:
-
这看起来有点过时的代码(完整的SQL injection vulnerabilities) - 你可能想找到一个更现代的教程......
-
第一个执行 MySQL 查询,第二个计算查询返回的行数。这些都在文档中,并且在任意数量的教程中都有解释。
-
@CD001 虽然它可能不是好的代码,但它并没有真正过时。它使用
mysqli而不是mysql。不幸的是,大多数程序员(包括教程编写者)都没有防范 SQL 注入。 -
@Barmar 我认为更现代的教程会使用绑定参数和
password_hash(),并且不会在出错时回显“失败”。 -
@CD001 我不认为这是“旧”或“现代”的问题,它只是“坏”与“好”的区别。糟糕的代码不会过时。
标签: php mysql sql database mysqli