3.2.2 pdo APP_DEBUG=false时出现的bug

浏览:774 发布日期:2014/05/25
3.2.1 - 严重 - 未处理
情景:
1.pdo查询,参数化
2.define('APP_DEBUG', false);
3.错误提示:pdo参数化 由于没有初始化dbType,导致where 条件的var=:var 成为var=''或var=0
4.错误原因:官方你自己去找吧,懒得说
5.修改方案
5.1代码位置:ThinkPHP\Library\Think\Db\Driver\Pdo.class.php
5.2修改方案:修改escapeString方法
 /**
     * SQL指令安全过滤
     * @access public
     * @param string $str  SQL指令
     * @return string
     */
    public function escapeString($str) {
        //修改成如下代码
         $type=$this->dbType;
         if(empty($type)){
             $type=$this->_getDsnType(C('DB_DSN'));
         }
         switch($type) {
            case 'MSSQL':
            case 'SQLSRV':
            case 'MYSQL':
                return addslashes($str);
            case 'PGSQL':                
            case 'IBASE':                
            case 'SQLITE':
            case 'ORACLE':
            case 'OCI':
                return str_ireplace("'", "''", $str);
        }
    }
  
评论(
后面还有条评论,点击查看>>