在我的一个codeigniter项目中,我想连接多个数据库。我连接到多个并且工作正常。
这是一个更新 - 大项目。意味着需要从多个数据库等重新构建和获取数据。
由于它很大,其现有的数据库查询如下
型号.php
$res=mysql_query("select * from news order by date DESC LIMIT 0,10");
while($r=mysql_fetch_array($res)){
echo '<li><div class="newshead"><a href="'.site_url('movie-news/'.$r['id'].'/'.$r['seo']).'">'.$r['heading'].'</a></div><img alt="'.$r['heading'].'" align="left" src="share/news/'.$r['thumb'].'" /><p>'.stripslashes(strip_tags(substr($r['news'],0,150))).'</p><br/> <a class="readmore" href="'.site_url('movie-news/'.$r['id'].'/'.$r['seo']).'">Read More</a></li>';
}
所以我在配置中添加了 2 个数据库并像这样连接到数据库
$this->load->database('default', TRUE);
$res=mysql_query("select * from news order by date DESC LIMIT 0,10");
while($r=mysql_fetch_array($res)){
echo '<li><div class="newshead"><a href="'.site_url('movie-news/'.$r['id'].'/'.$r['seo']).'">'.$r['heading'].'</a></div><img alt="'.$r['heading'].'" align="left" src="share/news/'.$r['thumb'].'" /><p>'.stripslashes(strip_tags(substr($r['news'],0,150))).'</p><br/> <a class="readmore" href="'.site_url('movie-news/'.$r['id'].'/'.$r['seo']).'">Read More</a></li>';
}
有数百个像这个查询这样的函数。我的实际问题是,我没有在构造函数中添加/连接数据库,而是将数据库添加到每个函数中。从那里它将收到从哪个数据库获取数据的通知。
是否会影响站点的性能(如果我从每个功能连接到DB)
其实我是这样编码的
Class Tickets extends CI_Model {
function __construct() {
parent::__construct();
$this->db =$this->load->database('users', TRUE);
$this->gen = $this->load->database('default', TRUE);
}
function getSlidingThumb(){
$this->gen->select('*');
$this->gen->from('front_slide');
$this->gen->order_by("id", "ASC");
$query = $this->gen->get();
$thumbs = $query->result();
foreach($thumbs as $thu){
echo '<li><a href="javascript:;"><img src="share/home/t-'.$thu->image.'" alt="'.$thu->title.'" width="45" height="23" border="0"/></a> </li>';
}
}
在这种情况下,我需要在构造函数中将 db 连接到一次并像这样查询。 $query = $this->gen->get();
但是为此,我需要编辑 100 个现有函数
请告诉我我想更喜欢哪个选项。客户端需要性能和快速加载
您能否配置数据库,以便在 CodeIgniter 中配置的默认用户可以访问所有数据库?如果是,则可以将数据库作为参数传递并在查询中使用它:
修改您的模型:
Class Tickets extends CI_Model {
public function __construct() {
parent::__construct();
}
public function getSlidingThumb ($db = 'default') {
$this->db->select('*');
$this->db->from("$db.front_slide");
$this->db->order_by("id", "ASC");
$query = $this->db->get();
return $query->result();
}
}
为了清楚起见并尊重MVC模式,请将HTML移动到视图:
<?php foreach ($thumbs as $thu) : ?>
<li><a href=""><img src="share/home/t-<?php echo $thu->image;?>" alt="<?php echo $thu->title;?>" width="45" height="23" border="0" /></a></li>
<?php endforeach;?>