Ignore:
Timestamp:
2013/03/10 05:01:12 (11 years ago)
Author:
adachi
Message:

#2181 SQLを検証し、問題ある場合はロールバック

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/camp/camp-2_13-plugin/data/class/plugin/SC_Plugin_Installer.php

    r22676 r22682  
    4040        $this->arrInstallData['copy_file'] = array(); 
    4141        $this->arrInstallData['copy_direcrtory'] = array(); 
     42        $this->arrInstallData['insert'] = array(); 
     43        $this->arrInstallData['update'] = array(); 
    4244        $this->arrInstallData['remove_file'] = array(); 
    4345        $this->arrInstallData['remove_directory'] = array(); 
     
    113115        $plugin_code = $this->arrPlugin['plugin_code']; 
    114116 
    115         $objQuery =& SC_Query::getSingletonInstance(); 
    116          
     117 
    117118        // テーブル作成SQLなどを実行 
    118119        $arrSql = $this->arrInstallData['sql']; 
    119          
     120        $arrErr = array(); 
     121 
     122        // SQLの検証 
     123        foreach ($arrSql as $sql) { 
     124            $this->log("verify sql: " . $sql['sql']); 
     125            $error_message = $this->verifySql($sql['sql'], $sql['params']); 
     126            if (!is_null($error_message)) { 
     127                $this->log("verify sql: invalid sql " . $sql['sql']); 
     128                $arrErr[] = $error_message; 
     129            } 
     130        } 
     131         
     132        if (count($arrErr) > 0) { 
     133            $this->log("verify sql: err"); 
     134            return $arrErr; 
     135        } 
     136         
     137        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     138         
     139        // SQLの実行 
    120140        foreach ($arrSql as $sql) { 
    121141            $this->log("exec sql: " . $sql['sql']); 
     
    236256                'arrRawSqlVal' => $arrRawSqlVal) 
    237257        ); 
    238     }     
     258    } 
     259     
     260    /** 
     261     *  
     262     * @param string $sql 
     263     * @param type $params 
     264     */ 
     265    protected function verifySql($sql, $params) { 
     266        // FIXME $paramsのチェックも行いたい. 
     267        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     268         
     269        // force runを有効にし, システムエラーを回避する 
     270        $objQuery->force_run = true; 
     271 
     272        // prepareでSQLを検証 
     273        $sth = $objQuery->prepare($sql); 
     274 
     275        if (PEAR::isError($sth)) { 
     276            $error_message = $sth->message . ":" . $sth->userinfo; 
     277        } 
     278        // force_runをもとに戻す. 
     279        $objQuery->force_run = false; 
     280         
     281        return $error_message; 
     282    } 
    239283} 
Note: See TracChangeset for help on using the changeset viewer.