mysqli超全局连接对象,一次多个连接

时间:2010-09-14 18:24:23

标签: php mysqli

我一直在使用这个解决方案来获得超全局的mysqli连接:

class blst_db {
private static $mysqli;
private function __construct(){} //no instantiation

static function cxn() {
    if( !self::$mysqli ) {
        self::$mysqli = new mysqli(...);
    }
    return self::$mysqli;
 }        

//使用 blst_db :: CXN() - >制备(....

我发现它here并且它工作正常但是当我尝试同时获得两个连接时出现错误。例如,我有一个运行像这样的查询的类:

$query_points = blst_db::cnx()->prepare('SELECT point_id FROM points WHERE id=?');
$query_points->bind_param('i', $this->id);
$query_points->bind_result($point_id);
$query_points->execute();
while ($query_points->fetch()) {
     $point = new blst_point ($point_id);
     $points[] = $point;  }

我正在在while语句中创建各种对象,并且对象构造函数每次都运行另一个查询(另一个$ query = blst_db :: cnx-> prepare(...)),那就是那个不工作的对象我找不到问题。如果我更改代码并在while语句中创建一个数组,然后在关闭该查询后,我在foreach中创建所有对象我没有问题,但我不喜欢这个解决方案。

谢谢!

1 个答案:

答案 0 :(得分:1)

我发现了问题。我必须存储第一个查询的结果,以便我可以在其中运行其余的查询。我刚补充说:

$query_points->store_result();
在执行execute()之后

然后我在关闭$ query_points之前创建了一个free_result()并且它工作正常。 我找到了解决方案here