【问题标题】:expects at least X parameters - Warnings, Notices [duplicate]至少需要 X 个参数 - 警告、通知 [重复]
【发布时间】:2014-12-14 03:56:34
【问题描述】:

在我的网页上为管理员登录。我正在关注一个有点旧的教程,我正在尝试为 MYSQLI 更新它。在他的视频中,一切都很完美。但是对我来说......

if(isset($_POST['submit'])) {

    $username = $_POST['username'];
    $password = md5($_POST['password']);
    if(empty($username) or empty($password)) {

        echo "<p class='warn'>Oops!</p>";

    } else { 

        $checklogin = mysqli_query(" SELECT id FROM admins WHERE username='$username' AND password='password' ");

        if(mysqli_num_rows($checklogin) == 1){

            echo "You can log in.";

        } else {

            echo "Oops";

        }
    }
} 

Warning: mysqli_query() expects at least 2 parameters, 1 given in /opt/lampp/htdocs/WEBSITES/Site1/admin/login.php on line 29

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /opt/lampp/htdocs/WEBSITES/Site1/admin/login.php on line 31

【问题讨论】:

  • 我会推荐使用PDO。 IMO 它比 MySQLi 更安全、更易于使用。
  • 你确定这个错误不是你的mysqli_query中缺少$引起的吗? [..]AND password='$password'"); 部分缺少 $
  • 不要将 MD5 与密码一起使用。 PHP5 具有处理密码哈希的新功能。
  • @Kommodore 仍然收到错误
  • @user3725053 据我所知,PDO 和 MySQLi 在安全性方面提供完全相同的功能。哪个更容易是个人喜好问题,但 MySQLi 中的过程函数更类似于旧教程中使用的旧 mysql_* 函数。

标签: php mysql login mysqli


【解决方案1】:

有关不正确参数的错误通常可以通过查找相关函数的手册来解决。

在这种情况下,转到http://php.net/mysqli_query,你会看到这个函数摘要:

混合 mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

因此,预期的两个参数是 mysqli 对象,表示与数据库的连接(您将在第一次连接时获得),然后是要运行的 SQL 字符串(您当前正在传递)。

第二个错误是第一个错误的结果:因为您没有检查错误,$checklogin 并不代表查询结果成功。


顺便说一句,如果教程没有继续解释,您可能还想在这里查看其他一些问题:

【讨论】:

    【解决方案2】:

    您对mysqli_query() 的调用要求第一个参数是您与数据库的连接,这将在mysqli_connect() 期间返回。这是您的第一个警告。

    由于您没有提供与mysqli_query() 的连接,因此$checkLogin 的返回值等于null,这是您的第二个警告出现的地方。mysqli_num_rows() 期望从成功的查询中获得结果集。

    这是你的解决方法:

    $connection = mysqli_connect("host", "user", "pass", "yourDB");
    $result = mysqli_query($connection, "SELECT some, fields FROM YourTable WHERE something = 'this'");
    

    【讨论】:

    • 已经建立了连接,但没有将$connection 放入mysqli_query。现在可以了。谢谢。我会接受的。
    • @Razzey 很高兴它正在工作。请注意,MySQLi 库函数的许多过程版本都需要连接、结果等。请务必查阅这些函数的手册以找出您可能需要的任何参数。
    • 会的,谢谢!仍在学习所有这些 PHP 和数据库的东西。祝你白天/晚上/晚上愉快!
    • @Razzey 欢迎您。我还建议您查看与 MD5 和密码散列相关的其他 cmets 和答案。我还建议您使用准备好的语句来帮助防止 SQL 注入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2013-10-09
    • 2020-10-01
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多