おれおれDBIをPHPで作っててダメで反省した

<?php
// DB操作用インターフェース
class DBI {
  var $dbh;
  var $sth;
  /*
   * 接続開始
   * 
   */
  function init($db_driver, $db_host, $db_name, $db_user, $db_pass) {
    include_once('DB.php');
    
    $this->dbh = DB::connect("$db_driver://$db_user:$db_pass@$db_host/$db_name");
    if (DB::isError($this->dbh)) {
      exit($this->dbh->getMessage());
    }
  }
  /*
   * 接続解除
   * 
   */
  function close() {
    $this->dbh->disconnect();
  }
  /*
   * select
   * 
   */
  function do_select($sql, $arr = array(), $key = null) {
    $this->sth = $this->dbh->prepare($sql);
    
    $result = $this->dbh->execute($this->sth, $arr);
    if ( DB::isError($result) ) {
      die('呼び出し文の実行に失敗しました: ' . $result->getMessage());
    }
    
    return $result ? $key ? $this->parse_hash($key, $result) : $this->parse_array($result) : false;
  }
  /*
   * update, delete, replace?
   * 
   */
  function do_regist($sql, $arr = array()) {
    $this->sth = $this->dbh->prepare($sql);
    
    $this->dbh->execute($this->sth, $arr) or die('追加クエリの送信に失敗しました');
  }
  /*
   * 直実行
   * 
   */
  function do_execute($sql) {
    $this->dbh->query($sql);
    if ( DB::isError($result) ) {
      die('直文の実行に失敗しました: ' . $result->getMessage());
    }
  }
  /*
   * 結果を配列化
   * 
   */
  function parse_array($db_data) {
    $array_list = array();
    $cnt = 0;
    while ($data = $db_data->fetchRow(DB_FETCHMODE_ASSOC)) {
      $array_list[$cnt] = $data;
      $cnt++;
    }
    return $array_list;
  }
  /*
   * 結果を指定されたキーでハッシュ化
   * 
   */
   function parse_hash($key = null, $db_data) {
    $array_list = array();
    while ($data = $db_data->fetchRow(DB_FETCHMODE_ASSOC)) {
      $array_list[$data[$key]] = $data;
    }
    return $array_list;
   }
}
?>

※これはゆうようせいのないコードです


全然インターフェイスって呼べる代物じゃないんだけど。
というかそもそも存在の意味が分からないんだけど!
これで5000件くらいレコードあるテーブルに
$DBI->do_select('SELECT * FROM hoge');
やったら死んだ。
parse_arrayのトコで死んでた。
やってみたら目測で1000件くらいが限界だったなー。
軽いデータ裁くには丁度いいけど、大きなデータ触るときには使えないなと思った。
因みにparse_arrayを使わず一個ずつ出力したら100万件やっても普通にまわせた。
phpのメモリ上のキャッシュオーバーも問題だったみたい。