在codeigniter 2.1以上版本通过PDO使用sqlite3!
本帖最后由 xingis 于 2012-8-28 19:25 编辑codeigniter从2.1版本开始支持pdo,使用pdo驱动支持sqlite3,只需在config/database.php改动2行既可!
$db['default']['hostname'] = 'sqlite:' . APPPATH . 'db/mydatabase.db';
$db['default']['dbdriver'] = 'pdo';
感谢 连接成功了
:victory: 楼主请教你
$db['default']['hostname'] = 'sqlite:' . APPPATH . 'db/mydatabase.db';
$db['default']['dbdriver'] = 'pdo';
这个设置好了
可是在模型中如何使用sqllite和pdo查询啊?
能否简单写个模型查询方法啊? 在config里面加了这两句
可是在模型里还是要 $dbh = new PDO($dsn, $user, $pass); 这样连接数据库啊
否则就出错
而且也不能用$this-db->query();这样来执行语句啊?
那config里面添加了有什么用呢?
本帖最后由 xingis 于 2012-8-28 19:46 编辑
跳墙的狗 发表于 2012-8-23 15:48 static/image/common/back.gif
楼主请教你
$db['default']['hostname'] = 'sqlite:' . APPPATH . 'db/mydatabase.db';
$db['default']['db ...
在模型中直接使用AR查询!跟原来你在使用MySQL做数据库查询一样!
post model
<?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
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 */
本帖最后由 xingis 于 2012-8-28 19:38 编辑
跳墙的狗 发表于 2012-8-23 16:15 static/image/common/back.gif
在config里面加了这两句
可是在模型里还是要 $dbh = new PDO($dsn, $user, $pass); 这样连接数据库啊
否则 ...
models中无需再连接数据库!
你可以在config/autoload.php 55行修改:
$autoload['libraries'] = array('database');
如果你非得在models加载的话,你可以在构造函数里添加这一行:
$this->load->database(); $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
报上面两个错误,请问是怎么回事呢? love.zy 发表于 2013-3-2 12:04 static/image/common/back.gif
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost'; ...
刚好也遇到这个问题,挖了一下 v2.1.3 的代码。
system/database/drivers/pdo/pdo_drivers.php 里有一行empty($this->database) OR $this->hostname .= ';dbname='.$this->database;把配置里的 hostname 设置成 'sqlite:balabala.sqlite',database 设置成 '' 就行了。
考虑到代码的兼容性,可以自己加版本判断 version_compare() 。 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
这是什么原因
页:
[1]