2010-08-26 4 views
0

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

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

Нужно ли вам рулон вашего собственного слоя доступа? см. http://docs.php.net/pdo – VolkerK

+0

К сожалению, драйвер PDO для MS SQL Server находится только на экспериментальной стадии (http://uk.php.net/manual/en/ref.pdo-dblib. PHP). Мне нужно что-то более крепкое. – chattsm

+0

Есть еще один серверный драйвер для pdo, см. Http://msdn.microsoft.com/en-us/library/cc296152%28SQL.90%29.aspx – VolkerK

ответ

0

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