php DBAL для выборки строк MySQLi / MSSQL - PullRequest
0 голосов
/ 26 августа 2010

Я пытаюсь написать простой, тонкий и эффективный слой абстракции базы данных поверх библиотек PHP MySQLi (процедурный) и MSSQL, который будет использоваться следующим образом ...

while ($a = db::go('db_name')->query('select * from foo')->row()) {
  print_r($a);
}

У меня написан класс, но я несколько пытаюсь понять, как лучше всего просмотреть результаты. Класс должен будет обрабатывать только запросы на выборку и обрабатывать несколько больших наборов результатов. Вот фрагмент метода ->row() ...

public function row() {
  return $this->{'get'.ucwords($this->details['type']).'Row'}();
}
private function getMysqliRow() {
  return @mysqli_fetch_assoc($this->result);
}
private function getMssqlRow() {
  return @mssql_fetch_assoc($this->result);
}

В данный момент вызов приводит к бесконечному циклу и извлекает одну и ту же строку каждый раз, потому что внутренний указатель в наборе результатов не увеличивается так же, как вызов while ($a = mssql_data_seek($result)), что завершает смысл (набор результатов не является глобальным, вы должны иметь возможность обрабатывать более одного набора результатов одновременно!).

Так, кто-нибудь знает элегантный и эффективный способ обойти это? Или единственное решение использовать функции поиска данных ( mysqli_data_seek () и mssql_data_seek () ) и удерживать указатель на текущую позицию в наборе результатов? Если да, насколько это эффективно (я буду обрабатывать большие наборы результатов> 250000)? И как обработчик цикла while достигнет конца набора результатов?

1 Ответ

0 голосов
/ 26 августа 2010

Проигнорируйте это, я был глупым! Я не сделал результирующий ресурс статическим членом, поэтому он восстанавливался при каждом вызове. Извиняюсь!

...