1Next >
jiangsir6688 | 发表于:10-09-17 22:56 [添加收藏] 楼主 [回复] #Top# | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
人气:326
积分:389
金币:15037
|
我们首先通过EMS MySQL Manager来建立名为dbtest的数据库和测试表格.表格如下(数据和表结构均摘自Oracle SQL基础培训教程)
一、测试数据表结构: 表格:Department
表格:Employees
二、初步比较 用PHPMyAdmin导出数据和表结构,在d:sqlite目录下建立名为dbtest.sqlite的数据库.并用SQLiteManager直接将从phpMyAdmin导出来的SQL语句来生成数据表和数据.这样两个测试数据库的表结构和数据都是完全一样的. 先做一个简单的测试。那就是在PHP中对不同的数据库实现几乎同样的功能。从中,我们可以基本看出两种数据库API用法的相同点和不同点,也可以看出结果的相同点和不同点。首先访问MySQL数据库 //建立连接 $link = mysql_connect('localhost', 'root', '') or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; //选择测试数据库 mysql_select_db('dbtest') or die('Could not select database'); // 执行SQL语句 $query = 'SELECT * FROM department'; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); //以数组一次访问一行的方式来取得数据,并打印出查询结果 while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { print_r($line); } //清除资源 mysql_free_result($result); mysql_close($link); ?> 得到的结果如下: Array ( [DEPARTMENT_ID] => 90 [DEAPRTMENT_NAME] => Executive [MANAGER_ID] => 100 [LACATION_ID] => 1700 ) Array ( [DEPARTMENT_ID] => 60 [DEAPRTMENT_NAME] => IT [MANAGER_ID] => 103 [LACATION_ID] => 1400 ) //打开SQLite数据库 $db = sqlite_open("d:sqlitedbtest.sqlite"); $rows =array(); $rs = sqlite_query($db,"select * from department"); //以数组一次访问一行的方式来取得数据,并打印出查询结果 while ($r = sqlite_fetch_array($rs)) { $rows[] = $r; print_r($r); sqlite_close($db); } ?> 得到的数据如下: Array ( [0] => 90 [DEPARTMENT_ID] => 90 [1] => Executive [DEAPRTMENT_NAME] => Executive [2] => 100 [MANAGER_ID] => 100 [3] => 1700 [LACATION_ID] => 1700 ) Array ( [0] => 60 [DEPARTMENT_ID] => 60 [1] => IT [DEAPRTMENT_NAME] => IT [2] => 103 [MANAGER_ID] => 103 [3] => 1400 [LACATION_ID] => 1400 ) 从以上可以看出,SQLite和MySQL的连接上有点不同,这是由于MySQL是基于客户端、服务器结构的,而SQLite是文件型数据,当然是不一样的,其它好多地方都可以只将mysql替换成sqlite就可以,但是细心一点就会发现,两个fetch_array方法获得的数组也有很大的不同,sqlite_fetch_array()获得的数组是字段数的两倍,既可以以字段名$line[DEPARTMENT_ID]或者$line[‘DEPARTMENT_ID’]来访问,也可以索引$line[0]来访问,但是MySQL只能以$line[DEPARTMENT_ID]或$line[‘DEPARTMENT_ID’]来访问。注意,字段名访问的大小写是严格区分的。 三、重大差距 以上这种差别不会引起程序迁移方面太大的问题,因为一般以字段名访问,这点是一致的。更重要的差别在于执行多表关联查询时得到的结果的问题。 我们将上面的查询语句改成: SELECT a.*,b.* FROM department a,employees b where b.employee_id=a.manager_id 在访问mysql数据库时,得到的结果如下(代码见附件): Array ( [DEPARTMENT_ID] => 90 [DEAPRTMENT_NAME] => Executive [MANAGER_ID] => 100 [LACATION_ID] => 1700 [EMPLOYEE_ID] => 100 [FIRST_NAME] => Steven [LAST_NAME] => King [EMAIL] => SKING@mail.com [PHONE_NUMBER] => 515.123.4567 [HIRE_DATE] => 2003-08-19 [JOB_ID] => AD_PRES [SALARY] => 24000 ) Array ( [DEPARTMENT_ID] => 60 [DEAPRTMENT_NAME] => IT [MANAGER_ID] => 103 [LACATION_ID] => 1400 [EMPLOYEE_ID] => 103 [FIRST_NAME] => Lex [LAST_NAME] => Dehaan [EMAIL] => LDehaan@mail.com [PHONE_NUMBER] => 515.123.4569 [HIRE_DATE] => 2003-08-28 [JOB_ID] => AD_VP [SALARY] => 17000 ) 用同样的查询语句改写访问SQLite数据库的文件,得到的结果除了上述提到的不同之外,更重要的是在字段名之前加上了表别名的前缀。相比看来,SQLite的结果更加合理,因为可以绝对避免不同表的字段名相同时访问所产生的问题,但是为程序从MySQL到SQLite的迁移增大了麻烦。 Array ( [0] => 90 [a.DEPARTMENT_ID] => 90 [1] => Executive [a.DEAPRTMENT_NAME] => Executive [2] => 100 [a.MANAGER_ID] => 100 [3] => 1700 [a.LACATION_ID] => 1700 [4] => 100 [b.EMPLOYEE_ID] => 100 [5] => Steven [b.FIRST_NAME] => Steven [6] => King [b.LAST_NAME] => King [7] => SKING@mail.com [b.EMAIL] => SKING@mail.com [8] => 515.123.4567 [b.PHONE_NUMBER] => 515.123.4567 [9] => 2003-08-19 [b.HIRE_DATE] => 2003-08-19 [10] => AD_PRES [b.JOB_ID] => AD_PRES [11] => 24000 [b.SALARY] => 24000 ) Array ( [0] => 60 [a.DEPARTMENT_ID] => 60 [1] => IT [a.DEAPRTMENT_NAME] => IT [2] => 103 [a.MANAGER_ID] => 103 [3] => 1400 [a.LACATION_ID] => 1400 [4] => 103 [b.EMPLOYEE_ID] => 103 [5] => Lex [b.FIRST_NAME] => Lex [6] => Dehaan [b.LAST_NAME] => Dehaan [7] => LDehaan@mail.com [b.EMAIL] => LDehaan@mail.com [8] => 515.123.4569 [b.PHONE_NUMBER] => 515.123.4569 [9] => 2003-08-28 [b.HIRE_DATE] => 2003-08-28 [10] => AD_VP [b.JOB_ID] => AD_VP [11] => 17000 [b.SALARY] => 17000 ) 四、为什么要迁移 SQLite是文件型数据库,对于建立个人学习研究型网站是个很好的选择,其空间价格同Access一样,但是可以跨平台访问。而MySQL数据库的空间价格同MS SQL Server的数据库是一样的。具体的可以参考中国万网的虚拟主机情况,里面提供了一款支持SQLite的Unix主机。 附件包含了所有测试代码,从PhpMyAdmin导出来的SQL文件。请改成rar格式然后解压。 http://wuxingblog.blogchina.com/inc/dbtest.doc 参考与工具: PHPManual EMS MySQL Manager PHPMyAdmin SQLiteManager Zend Development Environment 转摘http://wuxingblog.bokee.com/2651648.html
Ta最近还发表过
[模板]
用了4年的网站模板给大家共享
(19-08-10)
[模板]
不为别的,只为感恩,感恩KingCMS
(17-12-02)
[使用]
怎么把服务信息设置成默认审核
(16-12-05)
[疑问]
请问升级后,怎么关闭云端,查看新版本号?
(16-12-05)
[疑问]
地方门户版内容模块中的“自定义字段”怎么调用
(16-03-27)
随机阅读
[疑问]
本地测试,进入后台显示数据链接出错
(15-05-31)
[帮助]
地方站访谈:江门声色论坛 绘声绘色地描绘其蓝图
(14-05-04)
[疑问]
求助,自定义上传图片(设置第一张图片为缩略图)
(12-09-10)
[疑问]
本地安装模块写文件的时候出现了意外错误
(12-08-21)
[疑问]
PHP的tag能否分页么?
(12-02-12)
|
jiangsir6688 | 发表于:10-09-17 22:56 沙发 [回复] #Top# |
---|---|
人气:326
积分:389
金币:15037
|
这里面有一个sqlitemanager,这个软件,可以想想有什么用!
|
SinCS | 发表于:10-09-17 23:03 板凳 [回复] #Top# |
---|---|
人气:1148
积分:28
金币:73433
|
当然是用来管理sqlite数据库的软件了,很简洁实用。似乎还是免费的。
个人建议还是用mysql,sqlite的索引优化等还不是很完整,不知道会不会和ACCESS一样,文件大的时候,出现大量占用内存等现象? mysql的迁移也方便,遗憾的是数据库需要单独购买而已。 在php5.3成为主流之前,sqlite应用不会平民化。 |
HDR | 发表于:10-09-18 00:03 4楼 [回复] #Top# |
---|---|
人气:25
积分:578
金币:15845
|
这里指出楼主帖子中的一处错误,mysql_fetch_array()在没有用$result_type参数指定返回数组的格式时,同sqlite_fetch_array()一样,返回的也是同时包含关联和数字索引的数组。
|
cityker | 发表于:10-09-21 10:41 5楼 [回复] #Top# |
---|---|
人气:200
积分:462
金币:11745
|
我用国外空间,数据库不是问题,速度是问题 哈哈
|
1Next >