假设我有一个准备好的语句。它准备的查询无关紧要。我像上面那样获取结果(我不能显示实际的代码,因为它是我不想炫耀的东西。请把注意力集中在问题上,而不是无意义的例子),我得到
致命错误:在非对象中调用成员函数bind_param()错误。在被调用对象中引起的错误。
<?php
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
class table2Info{
private $mysqli;
public function __construct($_mysqli){
$this->mysqli = $_mysqli;
}
public function getInfo($id)
{
$db = $this->mysqli->prepare('SELECT info FROM table2 WHERE id = ? LIMIT 1');
$db->bind_param('i',$db_id);
$db_id = $id;
$db->bind_result($info);
$db->execute();
$db->fetch();
$db->close();
return $info;
}
}
$t2I = new table2Info($mysqli);
$stmt->prepare('SELECT id FROM table1 WHERE name = ?');
$stmt->bind_param('s',$name);
$name = $_GET['name'];
$stmt->bind_result($id);
$stmt->execute();
while($stmt->fetch())
{
//This will cause the fatal-error
echo $t2I->getInfo($id);
}
$stmt->close();
?>
问题是:是否有一种方法可以在另一个语句仍然打开时执行另一个准备好的语句?这会简化我的代码。我不能用SQL JOIN或类似的东西来解决这个问题,它必须这样做。现在我收集到的数据在一个数组中,并在$stmt->close();
之后循环,但这不是一个好的解决方案。为什么我要做两个循环,一个更好呢?
从您得到的错误来看,您的语句准备失败了。mysqli::prepare
失败时返回MySQLi_STMT
对象或false
。
检查语句准备过程中导致错误的返回值。如果为false,可以查看mysqli::error
查看更多细节。