mysqli объект суперглобального соединения, более одного соединения одновременно - PullRequest
0 голосов
/ 14 сентября 2010

Я использовал это решение, чтобы получить суперглобальное соединение MySQL:

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 () -> prepare (....

Iнашел его здесь и он работал нормально, но когда я пытаюсь получить два соединения одновременно, я получаю сообщение об ошибке. Например, у меня есть класс, который выполняет запрос, подобный этому:

$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 Ответ

1 голос
/ 14 сентября 2010

Я нашел проблему. Я должен сохранить результаты первого запроса, чтобы остальные могли выполнить внутри него. Я просто добавил:

$query_points->store_result();

после вызова execute (), а затем я сделал free_result () перед закрытием $ query_points, и он работает отлично Я нашел решение здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...