-1

这似乎非常容易,但对于我的生活来说,我无法弄清楚为什么这不起作用。我试图简单地将对象传递给函数,但出现此错误:

可捕获的致命错误:传递给 write_query() 的参数 3 必须是 mysqli 的实例,给定 null,在第 28 行的 C:\xampp\htdocs\CSP\login\login.php 中调用并在 C:\xampp\htdocs\ 中定义第 40 行 CSP\php_scripts\login_script.php

这些是我的函数定义:

function conn_database()
    {
        if (!empty($_POST['userid']) && !empty($_POST['password']))
        {
            $conn = new mysqli('localhost', 'root', '', 'csp');

            if (mysqli_connect_errno()) 
            {
                echo 'Connection to database failed:'.mysqli_connect_error();
                exit();
            }
            return $conn;
        }

    }


function write_query($userid, $password, mysqli $conn)
    {
        $query = 'select * from authorized_users '
        ."where userid= '$userid'"
        ."and password_id='$password'";
        $result = $conn->query($query);
        return $result;
    }

我这样称呼他们:

$conn = conn_database();
$result = write_query($userid, $password, $conn);

我在 write_query() 的定义中进行了类型提示,但根据我从错误中了解到的情况,我的第三个参数不被视为 mysqli 的实例。(我知道我应该对密码进行加盐处理,我只是想让它首先工作)。任何建议,将不胜感激

4

1 回答 1

2

您的第三个参数不是 mysqli 的实例。它是空的。这是因为您的get_connection函数没有返回任何内容。

你为什么要检查这个:

if (!empty($_POST['userid']) && !empty($_POST['password']))

这意味着您的代码将仅在您为其提供发布数据的情况下尝试连接到 SQLuserid服务器password。如果这是您想要的行为,您应该将if语句放在函数之外,如下所示:

if (!empty($_POST['userid']) && !empty($_POST['password']))
  $conn = conn_database();
  $result = write_query($userid, $password, $conn);
}

尽管看起来useridpassword没有设置,但无论如何。确保检查name输入的属性并执行 avar_dump($_POST)查看发布到脚本的内容。

于 2013-04-17T23:35:11.757 回答