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

可捕获的致命错误:传递给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的实例。 (我知道我应该给密码加盐,我只是想让它首先起作用)。 任何建议,将不胜感激

===============>>#1 票数:2 已采纳

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

你为什么要检查这个:

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

这意味着您的代码仅在为userid提供仅用于useridpassword发布数据时,才会尝试并连接到SQL Server。 如果这是您想要的行为,则应将if语句放在函数外部,如下所示:

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

尽管似乎没有设置useridpassword 确保检查输入的name属性,并执行var_dump($_POST)来查看发布到脚本的内容。

  ask by Travis Shanks translate from so

未解决问题?本站智能推荐: