将对象作为参数传递给函数不起作用

时间:2013-04-17 23:32:28

标签: php

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

捕获致命错误:传递给write_query()的参数3必须是mysqli的一个实例,null给定,在第28行的C:\ xampp \ htdocs \ CSP \ login \ login.php中调用,并在C:\ xampp中定义第40行的\ htdocs \ 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 个答案:

答案 0 :(得分:2)

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

你为什么要检查这个:

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

这意味着如果您仅为useridpassword提供帖子数据,则代码将仅尝试连接到SQL服务器。如果这是您想要的行为,您应该将if语句放在函数之外,如下所示:

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

虽然似乎没有设置useridpassword,但无论如何。请务必检查输入中的name属性并执行var_dump($_POST)以查看您的脚本是否已过帐。