是什么导致一个PHP函数打印出错误文本简介,而不是另一个


What is causing one PHP function to print out error text blurb, but not another?

我正在使用 Netbeans 在 PHP 中整理一个注册/登录表单。 为了实现这一点,我将登录、注册和数据库连接功能放在一个脚本.php文件中,该文件通过 include 调用加载。

好吧,我的登录功能使用它

$username = mysql_real_escape_string($_POST['username']);
$password = sha1(mysql_real_escape_string($_POST['password']));
$query = sprintf("SELECT * FROM users WHERE username='%s' AND password='%s'", $username, $password);
$link = connectDB();
$results = mysqli_query($link, $query);

以连接到数据库并获取结果。 验证将在稍后进行。

对于我的注册逻辑,我使用几乎相同的东西:

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
//check if user name and password match conditions
$link = connectDB();
$query = "SELECT * FROM users WHERE username = '" . $username . "'";
$results = mysqli_query($link, $query);

注册页面加载正常,但登录页面有一个错误文本打印输出,指出登录函数中有一个未定义的索引"用户名"。 这在页面加载时发生,并且未调用任何函数。

但是,在注册功能中几乎相同的布局下,我没有收到错误。

为什么会这样?

编辑

我发现了问题。

我使用 mysqli_connect 打开数据库连接,但使用 mysql-real_escape_string 函数。 两者是不相容的,加上i就不一样了。

几点,可能与您的问题有关,也可能无关,但我根本无法忽视:

  1. SQL 转义字符串始终是最后发生的事情。不要对字符串进行 SQL 转义,然后sha1它。阅读《大逃避主义》,了解逃脱的全部内容。
  2. 使用 mysql_real_escape_string 时,您需要在调用此函数之前先连接到数据库,因为它需要建立数据库连接才能完成其工作。
  3. 您正在混合使用mysql和mysqli扩展。使用其中一个,而不是两者的功能。
  4. 如果您使用的是 mysqli(您应该!),请使用预准备语句,而不是手动对字符串进行 SQL 转义并sprintf

换句话说,目前你完全错了。首先解决这些问题,您的问题可能会随之消失。