ci数据库操作框架
⑴ 如何配置ci框架连接sqlserver
一、启用FileTable
1、修改数据库引擎的属性
打开“SQL Server配置管理器”,修改SQL Server数据库引擎的属性。使用此页可针对此 Microsoft SQL Server 2012安装启用 FILESTREAM。
(1)针对 Transact-SQL 访问启用 FILESTREAM
选中此项可针对 Transact-SQL 访问启用 FILESTREAM。 必须选中此控制选项,才能使用其他控制选项。如果不启用此选项,就不能添加FileStream文件组。
(2)针对文件 I/O 流访问启用 FILESTREAM
选中此项可针对 FILESTREAM 启用 Win32 流访问。
(3)Windows 共享名
使用此控制选项可输入将用来存储 FILESTREAM 数据的 Windows 共享的名称。默认为该SQL Server实例的名称。
(4)允许远程客户端针对 FILESTREAM 数据启用流访问
选中此控制选项可允许远程客户端访问此服务器上的此 FILESTREAM 数据。
2、修改服务器的属性
打开“SQL Server Management Studio”,修改该实例的配置。默认配置如下:
上述选项解释如下:
(1)“FILESTREAM 访问级别”显示 SQL Server 实例上支持的 FILESTREAM 的当前级别。若要更改访问级别,请选择以下值之一:
已禁用
无法将二进制大型对象 (BLOB) 数据存储在文件系统中。此为默认值。即filestream access level=0
已启用 Transact-SQL 访问
可使用 Transact-SQL 访问 FILESTREAM 数据,但不能通过文件系统进行访问。即filestream access level=1
已启用完全访问
FILESTREAM 数据可使用 Transact-SQL 以及通过文件系统进行访问。即filestream access level=0
注意:在首次启用 FILESTREAM 时,您可能需要重新启动计算机才能配置驱动程序。
(2)“FILESTREAM 共享名称”显示在安装过程中选择的 FILESTREAM 共享的只读名称。
在本次实验中,我们将“FILESTREAM 访问级别” 设定为:已启用完全访问。
如果是通过T-SQL脚本执行,则运行以下脚本:
EXEC sys.sp_configure N'filestream access level', N'2'
RECONFIGURE WITH OVERRIDE
注意:设置完成之后,重启实例。
3、配置防火墙
若要在防火墙保护的环境中使用 FILESTREAM,客户端和服务器都必须能够将 DNS 名称解析为包含 FILESTREAM 文件的服务器。FILESTREAM 要求 Windows 文件共享端口 139 和 445 处于打开状态。
二、配置文件组
1、添加文件组
完成上述操作之后,就可以为该数据库添加专用于FileStream的文件组。
如果是通过脚本操作,请运行以下脚本:
ALTER DATABASE [db01] ADD FILEGROUP [FileStreamFileGroup] CONTAINS FILESTREAM
2、添加文件
完成上述操作之后,就可以为该数据库添加FilStream类型的数据库文件。
在本例中,系统并没有为“FileStream数据”的文件类型创建mdf或ndf文件,而是在文件夹C:\SqlData下面自动创建以逻辑名称命名的文件夹,即 C:\SqlData\FileData。其中filestream.hdr 文件是 FILESTREAM 容器的头文件。当这个数据库被删除时,mdf、ndf、log连同这个文件夹都会被删除。
如果是通过脚本操作,请运行以下脚本:
ALTER DATABASE [db01] ADD FILE ( NAME = N'FileData', FILENAME = N'C:\SqlData\FileData' ) TO FILEGROUP [FileStreamFileGroup]
注意:在上例中,在运行脚本之前,必须存在C:\SqlData,建议使用右侧的选择按钮选择路径。如果路径不存在,就会报错:
同时不能存在重复的文件夹,即不能存在C:\SqlData\FileData。否则也会报错:
3、启动非事务访问
FileTable 使 Windows 应用程序可以获取 FILESTREAM 数据的 Windows 文件句柄而不需要 SQL Server 事务。为了允许对 SQL Server 中存储的文件进行此非事务性访问,必须为要包含 FileTable 的每个数据库在数据库级别上指定所需的非事务性访问级别。
选项解释如下:
(1)FILESTREAM 非事务访问
为从文件系统到 FileTables 中存储的 FILESTREAM 数据的非事务性访问指定以下选项之一:OFF、READ_ONLY 或 FULL。
如果在服务器上未启用 FILESTREAM,则该值将设置为 OFF 并且被禁用。在本次实验中,将其设置为FULL。
(2)FILESTREAM 目录名称
为与所选数据库相关联的 FILESTREAM 数据指定目录名称。在 FileTable 文件夹层次结构中,此数据库级目录将成为在实例级别为 FILESTREAM 指定的共享名称的子级以及在数据库中创建的 FileTable 的父级。
如果启用非事务性访问时没有提供目录名称,则在以后必须提供它,这样才能在数据库中创建 FileTable。
如果是通过脚本执行,如下:
ALTER DATABASE db01
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'ImageFiles' )
注意:更改现有数据库时,调用带 DIRECTORY_NAME FILESTREAM 选项的 ALTER DATABASE (Transact-SQL) 语句。使用这些选项更改目录名称时,数据库必须以独占方式锁定,没有打开的文件句柄。
说明:为检查是否在数据库上启用了非事务性访问,可以查询目录视图,脚本如下:
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options
三、创建FileTable
1、创建第一个FileTable
“SQL Server Management Studio”只提供一个脚本模板,要想创建FileTable还是得用脚本完成:
USE db01
CREATE TABLE ImageTable1 AS FILETABLE
官方的范本为:
USE [db01]
CREATE TABLE [dbo].[ImageTable1] AS FILETABLE ON [PRIMARY] FILESTREAM_ON [FileStreamFileGroup]
WITH
(FILETABLE_DIRECTORY = N'ImageTable1', FILETABLE_COLLATE_FILENAME = Chinese_PRC_CI_AS)
2、创建第二个FileTable
CREATE TABLE ImageTable2 AS FILETABLE
3、获取共享路径
文件表创建之后,就会相应的产生一个文件表共享目录,该目录路径可以通过内建函数获取:
SELECT FileTableRootPath('ImageTable1')
本次实验所返回的结果为:\\SQL1\SqlFile\ImageFiles\ImageTable1
4、查看
通过Windows资源管理器,可见已经创建了以GUID命名的文件夹。
通过SQL Server Management Studio,查看表的结构。
四、操作
1、向文件夹中添加文件
通过 “Windows资源管理器”,向文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1中添加一个文件A01.GIF。然后运行脚本:
select * from ImageTable1
结果如下:
可见, SQL Server自动在Table中添加了记录。
2、文件改名
运行以下脚本:
update ImageTable1 set name='Cup.GIF' where name='A01.GIF'
通过“Windows资源管理器”,查看文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1,可见文件A01.GIF已经被改名为Cup.GIF 。
3、查看共享文件夹
我们可以继续复制其他文件,然后通过“Windows资源管理器”,查看文件夹。
4、删除文件
可以使用脚本删除,例如:
Delete ImageTable1 where name='Cup.GIF'
或者,通过“Windows资源管理器”直接删除该文件。
五、备份和还原
1、备份数据库
使用 SQL Server 备份数据库时,FILESTREAM 数据将与数据库中的结构化数据一起备份。
2、部分备份
如果不想将 FILESTREAM 数据与关系数据一起备份,则可以使用部分备份将 FILESTREAM 文件组排除在外。
⑵ ci框架中如何连接两个数据库,一个是本地的数据库,一个是远程的,我要同时操作两个数据库
ci手册中貌似无法设置两个数据库,我遇到这样的问题都是远程数据库有个接口地址。然后访问它来取得远程数据的。
⑶ ci框架如何使用 原生sql
是啊$sql = 'delete select update insert'; $this->db->query($sql);原生的没有框架执速度快的,你不要误导别人拉句子就是试验品 查看更多答案>>
⑷ CI框架如何在视图输出控制器来的数据库数据
php"><?phpecho$news_item[title];?>
改为
<?phpecho$news_item->title;?>
⑸ ci 框架怎么用模型获取数据显示到视图上
创建你的数据模型
数据库的运算并不是在控制类中进行的,而是在数据模型中,这样他们就可以在后面很容易地被反复使用。数据模型就是对你的数据库或其他数据存储方式进行取回、插入和更新的地方,它们的功能是展示你的数据(They
representyourdata)。
打开application/models文件夹新建一个文件news_model.php
,代码如下。确保你已经按照这里的说明配置了自己的数据库并且数据库服务器与PHP.ini有相应配置。
<?php
classNews_modelextendsCI_Model{
publicfunction__construct()
{
$this->load->database();
}
}
这段代码和早前写过的控制器的代码类似。它创建了一个继承CI_Model的数据模型,并用来载入数据库。通过
$this->db对象就可以使用数据库类了。
在对数据库进行查询前,我们要先建一个数据表。连接你的数据库并执行下面的SQL命令,并在里面加些内容。
CREATETABLEnews(
idint(11)NOTNULLAUTO_INCREMENT,
titlevarchar(128)NOTNULL,
slugvarchar(128)NOTNULL,
texttextNOTNULL,
PRIMARYKEY(id),
KEYslug(slug)
);
现在数据库和数据模型都设置好了,我们需要一个方法来把我们的文章从数据库中读取出来。数据库抽象层已经包含在CodeIgniter的ActiveRecord模式中了。这样可以确保只写一次查询就可以应用到
所有的数据库系统上。在你的数据库模型中添加如下代码。
publicfunctionget_news($slug=FALSE){
if($slug===FALSE)
{
$query=$this->db->get('news');
return$query->result_array();
}
$query=$this->db->get_where('news',array('slug'=>$slug));
return$query->row_array();
}
通过上面的代码可以实现两个不同的查询,你可以得到所有的新闻纪录,也可以通过slug得到某一篇新闻。你可能注意到了
$slug变量在查询前并没有被检验过(sanitized),因为ActiveRecord类已经把这个工作做完啦。
显示新闻
既然查询已经写完了,我们就要把这个数据模型和用来显示新闻内容的视图联系起来了。其实这个工作在我们之前写的pages控制类中就可以实现,但为了更清楚地向大家说明,我们来定义一个新的news控制类
application/controllers/news.php,代码如下。
<?php
classNewsextendsCI_Controller{
publicfunction__construct()
{
parent::__construct();
$this->load->model('news_model');
}
publicfunctionindex()
{
$data['news']=$this->news_model->get_news();
}
publicfunctionview($slug)
{
$data['news_item']=$this->news_model->get_news($slug);
}
}
看看上面的代码就会发现和我们之前写过的文件相似。首先,__construct方法是父级类(CI_Controller)
的构造函数,并调用了数据模型,这样这个控制器中的其他方法就能使用那个数据模型了。
其次,这里有两个方法分别用来显示所有的新闻和某一条。在第二个方法中可以看到$slug
变量被传递给了数据模型中的方法。数据模型就是用这个slug来确定需要返回哪一篇文章的。
现在通过数据模型,数据已经被控制器获得了,但还无法显示出来。下面我们就要把数据传递给视图了。
publicfunctionindex(){
$data['news']=$this->news_model->get_news();
$data['title']='Newsarchive';
$this->load->view('templates/header',$data);
$this->load->view('news/index',$data);
$this->load->view('templates/footer');
}
上面的代码从数据模型中获得了所有新闻的记录,并把它们赋值给了一个变量。页面的标题也赋给了$data['title']
,这些所有的数据都会传递给视图。现在你需要创建一个视图来显示这些新闻。新建
application/views/news/index.php代码如下。
<?phpforeach($newsas$news_item):?>
<h2><?phpecho$news_item['title']?></h2>
<divclass="main">
<?phpecho$news_item['text']?>
</div>
<p><ahref="http://[你的域名]/index.php/news/<?phpecho$news_item['slug']?>">Viewarticle</a></p>
<?phpendforeach?>
在这里,每条新闻都被循环出来展示给读者了。你可以看到我们的模板是用PHP和HTML混着写的,如果你更喜欢用模板语言的话,你可以用CodeIgniter的
模板解析器类或者第三方模板解析器(模板引擎)。
新闻概述页面已经做好了,现在还缺少每一篇文章的页面。之前写好的数据模型现在就可以非常简单地用来实现这个功能啦。你只需要添加一些代码到控制器并且创建一个视图。把下面的代码添加到news控制器中。
publicfunctionview($slug){
$data['news_item']=$this->news_model->get_news($slug);
if(empty($data['news_item']))
{
show_404();
}
$data['title']=$data['news_item']['title'];
$this->load->view('templates/header',$data);
$this->load->view('news/view',$data);
$this->load->view('templates/footer');
}
这里,$slug变量作为参数传递给了get_news()
方法,这样就可以返回特定的某一篇文章了。现在剩下的一件事就是创建视图
application/views/news/view.php了,代码如下。
<?php
echo'<h2>'.$news_item['title'].'</h2>';
echo$news_item['text'];
设置路由
因为之前设置了通配符路由规则,现在你需要额外的路由来显示刚刚写的控制器。按照下面的代码修改你的路由文件
(application/config/routes.php)
,这样就确保了请求调用的是news控制器而不是之前设置的pages控制器。第一行代码表示的是控制器中通过slug读取的那条新闻。
$route['news/(:any)']='news/view/$1';
$route['news']='news';
$route['(:any)']='pages/view/$1';
$route['default_controller']='pages/view';
把浏览器的地址改回根目录,在后面加上index.php/news来看看你的新闻页面吧。
⑹ ci框架怎么读写操作mysql数据库
首先呢,
1:在database里面配置数据库连接,
2:加载 $this->db->database();
3 : 操作数据库,$this->db->select('*')->get('tablename');
纯手打, 不会加技术交流群:522301635
⑺ CI框架如何在控制器里面链接数据库.然后执行SQL语句
在conf的自动加载,开启database自动加载,配置好数据库账号密码等,然后在控制器中如下:
$userInfo = $this->db->get('user'); //user为user表名
或者
$query = "select * from user";
$this->db->query($query);
⑻ CI框架中已经连接到一个数据库,现在我有一个控制器,里面操作的是另一个数据库,怎么连接这个数据库
重新配置数据库设置$this->db->databse($config);
$config是一个数组,包含
$config['host'] = ''
$config['database'] = ''
配置可以参考CI中的配置文件database.php
⑼ 您好 在CI框架 在进行数据库updatae 操作时 方法执行成功了 数据表中却没有任何变化 这可能是哪儿出错
控制层
function test_func(){
//获取model页面需要的两个参数
$competition_id = $_GET["competition_id"];
$report_class = $_GET["report_class"];
$this->load->model("Action"); //引入model
$data["head"] = $this->Action->get_report_item($competition_id, $report_class); //引用model的函数
$this->load->view("test_result",$data); //将结果显示在test_result.php页面中
}
view层:
<div id='result_div'>
<h3 style="align:center;color:blue;">添加结果显示</h3>
<?php if ($head){?> //此处选择了循环输出从控制层传输的结果
<table align="center"; border="1" cellpadding="1" cellspacing="1">
<tr align="center">
<td>字段名称(含义)</td> //该td中显示的是你从数据库、即model层中获取到的数据的含义,想显示多少,显示哪个,在这里确认
</tr>
<?php foreach ($head as $item){ ?>
<tr align="center">
<td><?php echo $item->test; ?></td>
</tr>
</table>
<?php }else {
echo “123”;
}?>
</div>
⑽ 怎么用ci框架显示数据库中的图片
显示数据库中的图片跟是不是CI框架没有任何的关系吧,把图片路劲存到数据库,然后在CI视图里面输出图片路劲就可以的,如果你是其他的问题,可以贴出代码,我给你看下。
<img src="XXX这里输出数据库图片的路劲">