【问题标题】:Why mysqli_data_seek isn't working after switching the code from mysql to mysqli?为什么将代码从 mysql 切换到 mysqli 后 mysqli_data_seek 不起作用?
【发布时间】:2017-11-22 23:58:00
【问题描述】:

我最近将我的代码从使用 mysql 更改为 mysqli,并解决了 WAMP 本地服务器显示的所有错误。但是登录机制被破坏了。现在,无论密码正确与否,它都允许用户登录。我正在使用以下函数来完成这项工作,在切换到 mysqli 之前它工作得很好。这里有什么问题?

function login($registration_id, $password) {
    include 'core/database/connect.php';

    $registration_id = sanitize($registration_id);
    $password = sanitize($password);
    $query = mysqli_query($link, "SELECT COUNT(`sr`) FROM `main_table` WHERE `registration_id` = '$registration_id' AND `password` = '$password'");
    return (mysqli_data_seek($query, 0) == 1) ? $registration_id : false;

    mysqli_close($link);
}

【问题讨论】:

  • 首先,你的代码是 vulnebra to sql injection。转义它们,或使用准备好的语句。其次,在您返回之前,mysqli_close 链接永远不会运行。 (脚本结束时php自动关闭连接(.
  • 显然,mysqli_query 中的COUNT(`sr`) 有问题。我用简单的sr 替换它,现在它正在工作。但我不知道为什么会这样。
  • 这能回答你的问题吗? SELECT COUNT(*) AS count - How to use this count

标签: php mysql mysqli


【解决方案1】:

mysqli_data_seek() 函数只返回一个布尔值,指示调用是否成功。它不会从底层 sql 查询的结果中返回任何内容。

由于您的 sql 查询是 select count(...),因此它将始终在结果集中返回一行。所以,除非 sg 出错,否则mysqli_data_seek() 的结果将永远为真,等于 1。这意味着每个人都可以登录。

你需要通过count()函数读取返回值来判断登录是否成功,例如mysqli_fetch_array()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-18
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多