可以说我有一个准备好的声明。它准备的查询无关紧要。我拿到上面的结果(我不能显示实际的代码,因为它是我不想炫耀的东西,请专注于问题,而不是示例没有意义),我得到在关闭另一个之前可以执行MySQLi准备好的语句吗?
致命错误:调用成员函数bind_param()中的非对象in ...错误。被调用对象中引起的错误。
<?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();
之后循环访问数据,但这并不是一个好的解决方案。当一个更好时,为什么我应该做两个循环?
[参考 - 此错误在PHP中意味着什么?](http://stackoverflow.com/q/12769982/367456) – hakre
[mysqli bind \ _param()致命错误](http:// stackoverflow .com/questions/6582512/mysqli-bind-param-fatal-error) – Jocelyn