我必须遵循以下代码:
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
,但我已阅读,重新阅读,重新检查,每一个字母代码,一遍又一遍。我准备把我所有的头发拉出来......
我做错了什么?
答案 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
查询返回空结果。
你必须做的两件事:
检查您是否正确连接到数据库 有权访问数据库中的数据
检查您的查询,看看它是否会在SQL
中返回任何结果
数据库中。