php mysqli FRUSTRATION

时间:2013-02-08 03:25:39

标签: php mysqli

我必须遵循以下代码:

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分钟之前就在另一个页面上遇到过这样的错误,我从sql查询中得到了FROM,但我已阅读,重新阅读,重新检查,每一个字母代码,一遍又一遍。我准备把我所有的头发拉出来......

我做错了什么?

2 个答案:

答案 0 :(得分: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);

所以,你会立即知道出了什么问题。

答案 1 :(得分:1)

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

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

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