时间:2009-05-22 23:00:04
类别:脚本收藏
访问:5941
最佳PHP开源ORM框架Doctrine
Doctrine是一个PHP的ORM框 架,它在 >=php5.2.3版本上才支持,它是一个功能强大的数据抽象层.它的一个主要特征就是写代码是OO方式的,并且它有一个DQL的语言, 这为开发人员提供了强大的替代到SQL保持最高的灵活性,而不需要不必要的代码重复。
===================================
Doctrine数据库编码修正:
有个问题就是建立数据库时一般推荐采用UTF-8编码以方便支持中文,同时为了统一连接校对和数据库字符为UTF-8, 在直接写sql的时代针对MySQL我们可以直接写 “set names utf8″,其他数据库就不同了。Doctrine 考虑得比较周到,可以通过如下操作来对所有的数据库连接进行设置:
Doctrine_Manager::getInstance()->getCurrentConnection()->setCharset('utf8')
在mysql数据库里面,每次操作都会执行,而我们很多时候可能根本不需要数据库操作,太浪费了。以下是解决办法,可以在建立实际的数据库链接操作之后才执行这条语句。
<?phpclassCharsetListenerextendsDoctrine_EventListener {protectedstatic$charset='utf8';publicfunctionsetCharset($charset='utf8'){self::$charset=$charset;}functionget($charset=''){if(!empty($charset)){self::setCharset($charset);}returnnewself();}publicfunctionpostConnect(Doctrine_Event$event){$event->getInvoker()->setCharset(self::$charset);}}
下面是初始化代码
$config=parse_ini_file(ROOT.DS.'app/config.ini.php',true);$db=$config['database'];$dsn= “{$db['driver']}://{$db['user']}:{$db['pass']}@{$db['host']}/{$db['name']}”;Doctrine_Manager::connection($dsn,$db['name']);CharsetListener::setCharset($db['charset']);Doctrine_Manager::getInstance()->getCurrentConnection()->addListener(CharsetListener::get($db['charset']));
这样就能够兼顾效率和字符集了。
Incoming search terms: