标签:
由于历史原因,有个kohana3.2的站点需要搬迁到php5.5上来,但php5.5已经不支持mysql_connect()这个函数了,只能使用PDO来连接数据库。
但换上PDO之后,报了这个的一个错:
Kohana_Exception [ 0 ]: Database method list_columns is not supported by Kohana_Database_PDO
居然这么恶心的事情都出现 -_-!
经过一轮google,终于找到解决方案了。
1. 在你的MODPATH或者APPPATH,创建新文件,classes/Database/PDO/MySQL.php,代码如下
<?php /* * PHP version 5.5 * * @copyright Copyright (c) 2012-2015 友客OA Inc. (http://www.yokeoa.com) * @link http://www.yokeoa.com * @license 友客OA版权所有 */ /** * 我是类描述信息哦! * * @author birdylee <birdylee_cn@163.com> * @since 2015年00月26日 * @version 1.0 * */ defined(‘SYSPATH‘) or die(‘No direct script access.‘); class Database_PDO_MySQL extends Database_PDO { public function list_columns($table, $like = NULL, $add_prefix = TRUE) { // Quote the table name $table = ($add_prefix === TRUE) ? $this->quote_table($table) : $table; if (is_string($like)) { // Search for column names $result = $this->query(Database::SELECT, ‘SHOW FULL COLUMNS FROM ‘ . $table . ‘ LIKE ‘ . $this->quote($like), FALSE); } else { // Find all column names $result = $this->query(Database::SELECT, ‘SHOW FULL COLUMNS FROM ‘ . $table, FALSE); } $count = 0; $columns = array(); foreach ($result as $row) { list($type, $length) = $this->_parse_type($row[‘Type‘]); $column = $this->datatype($type); $column[‘column_name‘] = $row[‘Field‘]; $column[‘column_default‘] = $row[‘Default‘]; $column[‘data_type‘] = $type; $column[‘is_nullable‘] = ($row[‘Null‘] == ‘YES‘); $column[‘ordinal_position‘] = ++$count; switch ($type) { //was $column[‘type‘] case ‘float‘: if (isset($length)) { list($column[‘numeric_precision‘], $column[‘numeric_scale‘]) = explode(‘,‘, $length); } break; case ‘int‘: if (isset($length)) { // MySQL attribute $column[‘display‘] = $length; } break; case ‘string‘: switch ($column[‘data_type‘]) { case ‘binary‘: case ‘varbinary‘: $column[‘character_maximum_length‘] = $length; break; case ‘char‘: case ‘varchar‘: $column[‘character_maximum_length‘] = $length; case ‘text‘: case ‘tinytext‘: case ‘mediumtext‘: case ‘longtext‘: $column[‘collation_name‘] = $row[‘Collation‘]; break; case ‘enum‘: case ‘set‘: $column[‘collation_name‘] = $row[‘Collation‘]; $column[‘options‘] = explode(‘\‘,\‘‘, substr($length, 1, -1)); break; } break; } // MySQL attributes $column[‘comment‘] = $row[‘Comment‘]; $column[‘extra‘] = $row[‘Extra‘]; $column[‘key‘] = $row[‘Key‘]; $column[‘privileges‘] = $row[‘Privileges‘]; $columns[$row[‘Field‘]] = $column; } return $columns; } }
2. 你需要设置使用新的驱动类,%path%/database/config/database.php,将‘type‘由PDO换成PDO_MySQL
‘default‘ => array ( ‘type‘ => ‘PDO_MySQL‘, ‘connection‘ => array( ‘dsn‘ => ‘mysql:dbname=test;host=127.0.0.1‘, ‘username‘ => ‘root‘, ‘password‘ => ‘123456‘, ‘persistent‘ => FALSE, ), ‘table_prefix‘ => ‘‘, ‘charset‘ => ‘utf8‘, ‘caching‘ => FALSE, ),
[kohana] kohana3.2,如何兼容PDO数据库连接方式
标签:
原文地址:http://www.cnblogs.com/davidhhuan/p/5077614.html