0

我必须遵循代码:

session_start();
if(isset($_SESSION['Username']))
{
    //User has selected auto sign-in re-fill session variables.
    $mysqli = new mysqli('****','****','****','****');
    if($mysqli->errno)
    {
        //Error connecting
    }
    else 
    {
        //No error connecting to database
        $stmt = $mysqli->prepare("SELECT Expires FROM Subscribers WHERE UName=?");
        $stmt->bind_param('s', $_SESSION['Username']);
        $stmt->execute();
        $stmt->bind_result($Expires);
        $stmt->store_result();
        while($row = $stmt->fetch())
        {
            if($Expires < time())
            {
                //Deny user
                $pageToShow = "Payment";
            }
            else 
            {
                //Accept    
                $pageToShow = "Content";
            }
        }
    }
}
else 
    { ... }

我收到错误Fatal error: Call to a member function bind_param() on a non-object in /home/content/42/7401242/html/****/wp-content/themes/****/archive.php on line 15

大约 30 分钟前,我在另一个页面上遇到了这样的错误,我已经FROM从 sql 查询中得到了这个错误,但是我一遍又一遍地阅读、重新阅读、重新检查了代码的每一个字母。我要把我所有的头发都拔掉...

我究竟做错了什么?

4

2 回答 2

2

这很简单。
你没有处理错误。
甚至没有问如何做到这一点。

在您的另一个问题中,他们向您展示了错误本身,而不是向您展示如何自己查看错误的方式。
在目前的问题中,答案是“检查您的查询”,这也不太有用。

与其要求其他人在您的查询中查找拼写错误,不如请 mysqli 来做。这样更有效率,特别是因为可能有另一个错误,不是在查询中,而是在其他地方。

因此,您必须检查每个数据库交互结果并将其转换为 PHP 错误。

$sql = "SELECT Expires FROM Subscribers WHERE UName=?";
$stmt = $mysqli->prepare($sql) or trigger_error($mysqli->error);
...
$stmt->execute() or trigger_error($mysqli->error);

因此,您将立即知道出了什么问题。

于 2013-02-08T03:58:25.117 回答
1

该错误告诉您您的SQL查询返回一个空结果。你必须做的两件事:

  1. 检查您是否正确连接到数据库以及您是否有权访问数据库中的数据

  2. 检查您的查询,看看它是否在您的SQL 数据库中返回任何结果。

于 2013-02-08T03:34:02.997 回答