Show
Ignore:
Timestamp:
10/02/08 18:12:10 (3 months ago)
Author:
nowelium
Message:

mysql の procedure サポートは終わり。
General error: 2014 Cannot execute queries while other unbuffered queries are active. とかは、PDOのPDO::MYSQL_ATTR_USE_BUFFERED_QUERY をいくら設定してもダメなので、少し逃げ。一端切断すればなんとかなるけど、Datasource設定とかは管理外なので、やらない。
multi rows は 2次元配列で。

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/php/misc/Hermit/src/Hermit/meta/HermitMySQLDatabaseMeta.php

    r20314 r20492  
    55 */ 
    66class HermitMySQLDatabaseMeta implements HermitDatabaseMeta { 
     7     
    78    const USING_DB_NAME_SQL = 'SELECT database()'; 
    89    const TABLE_INFO_SQL = 'SELECT * FROM %s LIMIT 0'; 
    910    const PROCEDIRE_INFO_SQL = 'SELECT param_list, returns FROM mysql.proc WHERE db = :db AND name = :name'; 
     11     
    1012    private $tables = array(); 
    1113    private $procedures = array(); 
     
    3739            } 
    3840        } 
     41        $stmt->closeCursor(); 
     42        unset($stmt); 
    3943        return $this->tables[$table] = $info; 
    4044    } 
     
    4650        $stmt->execute(array(':db' => $this->databaseName, ':name' => $procedure)); 
    4751        $paramList = $stmt->fetchColumn(0); 
     52        if(false === $paramList){ 
     53            throw new InvalidArgumentException('not found procedure name: ' . $procedure . ' in db: ' . $this->databaseName); 
     54        } 
    4855 
    4956        $info = new HermitProcedureInfo; 
     57        $info->setName($procedure); 
    5058        $chunk = array_map('trim', explode(',', $paramList)); 
    5159        foreach($chunk as $field){ 
     
    7886        } 
    7987 
     88        $stmt->closeCursor(); 
     89        unset($stmt); 
    8090        return $this->procedures[$procedure] = $info; 
    8191    } 
     
    8494        $stmt = $this->pdo->prepare(self::USING_DB_NAME_SQL); 
    8595        $stmt->execute(); 
    86         return $stmt->fetchColumn(0); 
     96        $result = $stmt->fetchColumn(0); 
     97         
     98        $stmt->closeCursor(); 
     99        unset($stmt); 
     100        return $result; 
    87101    } 
    88102}