用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6180|回复: 8
收起左侧

[讨论/交流] 在codeigniter 2.1以上版本通过PDO使用sqlite3!

[复制链接]
发表于 2012-8-15 00:34:06 | 显示全部楼层 |阅读模式
本帖最后由 xingis 于 2012-8-28 19:25 编辑

codeigniter从2.1版本开始支持pdo,使用pdo驱动支持sqlite3,只需在config/database.php改动2行既可!
PHP复制代码
 
$db['default']['hostname'] = 'sqlite:' . APPPATH . 'db/mydatabase.db';
$db['default']['dbdriver'] = 'pdo';
 
复制代码
发表于 2012-8-15 11:17:03 | 显示全部楼层
感谢 连接成功了
发表于 2012-8-23 15:48:43 | 显示全部楼层
楼主请教你
$db['default']['hostname'] = 'sqlite:' . APPPATH . 'db/mydatabase.db';
$db['default']['dbdriver'] = 'pdo';
这个设置好了

可是在模型中如何使用sqllite和pdo查询啊?
能否简单写个模型查询方法啊?
发表于 2012-8-23 16:15:15 | 显示全部楼层
在config里面加了这两句
可是在模型里还是要 $dbh = new PDO($dsn, $user, $pass); 这样连接数据库啊
否则就出错
而且也不能用$this-db->query();这样来执行语句啊?
那config里面添加了有什么用呢?
 楼主| 发表于 2012-8-24 11:20:56 | 显示全部楼层
本帖最后由 xingis 于 2012-8-28 19:46 编辑
跳墙的狗 发表于 2012-8-23 15:48
楼主请教你
$db['default']['hostname'] = 'sqlite:' . APPPATH . 'db/mydatabase.db';
$db['default']['db ...

在模型中直接使用AR查询!跟原来你在使用MySQL做数据库查询一样!

post model
PHP复制代码
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Post Model
*/

class post_model extends CI_Model {
 
        public function __construct()
        {
                parent::__construct();
        }
 
        /**
         * posts
         */

        function get_posts()
        {
                $this->db->from('posts');
 
                $query = $this->db->get();
               
                return $query->result();
        }
 
}
 
/* End of file: post_model.php */
/* Location: ./application/models/post_model.php */
复制代码


post controller
PHP复制代码
<?php
if (! defined('BASEPATH')) exit('No direct script access');
 
class Posts extends CI_Controller
{
 
        function __construct()
        {
                parent::__construct();
                $this->load->model('post_model');
        }
 
        /**
     * posts
     */

        public function index()
        {
                $data['posts'] = $this->post_model->get_posts();
                $this->load->view('posts.html', $data);
        }
 
 
}
 
/* End of file Posts.php */
/* Location: ./application/controllers/Posts.php */
复制代码

 楼主| 发表于 2012-8-28 19:35:25 | 显示全部楼层
本帖最后由 xingis 于 2012-8-28 19:38 编辑
跳墙的狗 发表于 2012-8-23 16:15
在config里面加了这两句
可是在模型里还是要 $dbh = new PDO($dsn, $user, $pass); 这样连接数据库啊
否则 ...

models中无需再连接数据库!
你可以在config/autoload.php 55行修改:
PHP复制代码
$autoload['libraries'] = array('database');
复制代码

如果你非得在models加载的话,你可以在构造函数里添加这一行:
PHP复制代码
$this->load->database();
复制代码
发表于 2013-3-2 12:04:18 | 显示全部楼层
                 $active_group = 'default';
                 $active_record = TRUE;
                 $db['default']['hostname'] = 'localhost';
                $db['default']['username'] = '';
                $db['default']['password'] = '';
                $db['default']['database'] = 'sqlite:'.APPPATH.'database/lovezy.sqlite';
                $db['default']['dbdriver'] = 'pdo';
                $db['default']['dbprefix'] = '';
                $db['default']['pconnect'] = TRUE;
                $db['default']['db_debug'] = TRUE;
                $db['default']['cache_on'] = FALSE;
                $db['default']['cachedir'] = '';
                $db['default']['char_set'] = 'utf8';
                $db['default']['dbcollat'] = 'utf8_general_ci';
                $db['default']['swap_pre'] = '';
                $db['default']['autoinit'] = TRUE;
                $db['default']['stricton'] = FALSE;
        break;


Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in D:\php\phpBlog\phpsrc\system\database\drivers\pdo\pdo_driver.php on line 114

PDOException: could not find driver in D:\php\phpBlog\phpsrc\system\database\drivers\pdo\pdo_driver.php on line 114

报上面两个错误,请问是怎么回事呢?
发表于 2013-5-3 15:56:26 | 显示全部楼层
love.zy 发表于 2013-3-2 12:04
$active_group = 'default';
                 $active_record = TRUE;
                 $db['default']['hostname'] = 'localhost'; ...

刚好也遇到这个问题,挖了一下 v2.1.3 的代码。
system/database/drivers/pdo/pdo_drivers.php 里有一行
  1. empty($this->database) OR $this->hostname .= ';dbname='.$this->database;
复制代码
把配置里的 hostname 设置成 'sqlite:balabala.sqlite',database 设置成 '' 就行了。
考虑到代码的兼容性,可以自己加版本判断 version_compare() 。
发表于 2014-7-29 10:31:49 | 显示全部楼层
Fatal error: Call to a member function rowCount() on a non-object in C:\AppServ\www\CodeIgniter\system\database\drivers\pdo\pdo_result.php on line 42

这是什么原因

本版积分规则