轻型数据库SQLite结合PHP的开发

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情


轻型数据库SQLite结合PHP的开发

SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:

ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE

同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。比如SQLite支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。如果你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么现在你可以考虑使用SQLite。目前它的最新版本是 3.2.2,它的官方网站是:http://www.sqlite.org,能在上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士。

现在我们开始简单的介绍,主要我是想讲清楚几个问题,一是如何安装使用,二是如何跟PHP结合开发。

一、安装

1. Windows平台

下载windows下的文件,其实就是一个命令行程序,(下载地址:http://www.sqlite.org/sqlite-3_2_2.zip),这个命令行程序用来包括生成数据库文件、执行SQL查询、备份数据库等等功能。
下载后比如我们解压缩到 D:/Downloads/sqlite/sqlite-3_2_2 这个目录下,那么我们进入cmd,并且进入该目录:
cd D:/Downloads/sqlite/sqlite-3_2_2
D:/Downloads/sqlite/sqlite-3_2_2>sqlite3 test.db
# 如果test.db不存在,那么就产生一个数据库文件,如果存在就直接使用该数据库文件,相当于mysql中的use
SQLite version 3.2.2
Enter ".help" for instructions
sqlite>
# SQLite的提示符,如果想查看命令帮助输入 .help,在sqlite中所有系统命令都是 . 开头的:
sqlite> .help
.databases             List names and files of attached databases
.dump ?TABLE? ...      Dump the database in an SQL text format
.echo ON|OFF           Turn command echo on or off
.exit                  Exit this program
.explain ON|OFF        Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF      Turn display of headers on or off
.help                  Show this message
.import FILE TABLE     Import data from FILE into TABLE
.indices TABLE         Show names of all indices on TABLE
.mode MODE ?TABLE?     Set output mode where MODE is one of:
                         csv      Comma-separated values
                         column   Left-aligned columns.  (See .width)
                         html     HTML



















# 我们创建一个数据库catlog
sqlite> create table catalog(
   ...> id integer primarykey,
   ...> pid integer,
   ...> name varchar(10) UNIQUE
   ...> );
sqlite>
# 如果表存在就会提示:
SQL error: table catalog already exists
# 我们创建索引信息
create index catalog_idx on catalog (id asc);
# 我们查看表的信息,看有多少个表
sqlite> .table
aa       catalog
# 查看表的结构:
sqlite> .schema catalog
CREATE TABLE catalog(
id integer primary key,
pid integer,
name varchar(10) UNIQUE
);
CREATE INDEX catalog_idx on catalog(id asc);
# 给数据表插入一条记录
sqlite> insert into catalog (ppid,name) values ('001','heiyeluren');
# 成功无任何提示,如果表达式错误提示错误信息:
SQL error: near "set": syntax error
# 检索有多少条记录
sqlite> select count(*) from catalog;
1
# 检索搜索记录
sqlite> select * from catalog;
1|1|heiyeluren

反正使用标准的SQL来操作就没有问题,不清楚可以去官方网站上查看帮助信息。另外还要说明的是SQLite不支持修改表结构,如果要修改表结构,只有删除表重新再建立,所以建立表的时候一定要考虑扩展性。估计以后这方面的功能会加强。


2. Linux/Unix 平台

error: 目前还没装过,呵呵,不过估计跟Windows差不多,改天把这部分内容补上。

二、PHP对SQLite的开发

PHP 5开始不再默认支持Mysql,而是默认支持SQLite,可见它的影响力多么大,所以如果你想做SQLite的PHP开发,建议你使用PHP 5.0.0以上版本,我目前使用的是 PHP 5.0.4版本,直接支持SQLite扩展,这里我就不仔细讲如何安装PHP扩展,如果不清楚可以查看PHP相关文档。
这里我主要是讲针对SQLite的开发。目前PHP的主流DB类都支持SQLite的驱动,包括PEAR::DB类、ADOdb类都支持,所以使用DB来来做开发也是个好的选择。

(以下操作为了简便,都是再Windows xp平台进行的)

1. 使用PHP操作已经建立好的sqlite数据库

如果你有一个已经通过sqlite.exe建立好了的数据库和表结构,那么你就能够直接对它进行操作。php中针对sqlite的处理函数比较多,你可以查看PHP手册获得详细信息。

我们使用sqlite_open()函数来打开一个sqlite数据库,它成功返回一个操作资源,失败返回false,那么以后的所有操作都是在这个资源上进行的,执行一个sql查询使用sqlite_query函数。

下面我假设你在当前PHP程序目录下有一个abc.db的sqlite数据库文件,我们对该文件进行操作:


//打开sqlite数据库
$db = @sqlite_open("abc.db");
//异常处理
if (!$db) die("Connection Sqlite failed./n");
//添加一个叫做foo的数据库
@sqlite_query($db, "CREATE TABLE foo (bar varchar(10))");
//插入一条记录
@sqlite_query($db, "INSERT INTO foo VALUES ('fnord')");
//检索所有记录
$result = @sqlite_query($db, 'select bar from foo');
//打印获取的结果
print_r(sqlite_fetch_array($result));

?>
我们看到的输出结果是:

Array
(
    [0] => fnord
    [bar] => fnord
)

证明我们代码执行成功,没有输入请检查程序,或者你的数据库文件是否存在。

那么有了这个基本操作,你就能够考虑使用更复杂的操作和SQL来操作它,让它帮你管理信息,你可以做一个留言本,或者做一个CMS系统,我想都是没有问题的。


2. 使用PHP建立数据库并且操作

如果你没有任何sqlite.exe之类的工具,那么你也能够通过php来创建一个sqlite数据库,并且对它进行管理。
其实通过sqlite.exe程序建立的数据库,内容是空的,其实只有后来等创建表,添加数据以后,数据库文件才有,那么我们是不是能够手工添加一个文件,比如一个空的 test.db 文件,并且对它进行操作。这是完全可以,下面我们就使用PHP程序来完成创建一个数据库,并且执行简单的建立数据表,插入数据和检索数据的功能。

首先我们来看代码:(代码比较长,但比较容易理解)

/**
 * 文件:sqlite.php
 * 功能:对sqlite数据库的处理
 * 作者:heiyeluren
 * 时间:2005-8-5
 */
define("LN", __LINE__);//行号
define("FL", __FILE__);//当前文件
define("DEBUG", 0);//调试开关

$db_name = "heiyeluren.db";
//创建数据库文件,文件内容为空
if (!file_exists($db_name)) {
 if (!($fp = fopen($db_name, "w+"))) {
  exit(error_code(-1, LN));
 }
 fclose($fp);
}
//打开数据库文件
if (!($db = sqlite_open($db_name))) {
 exit(error_code(-2, LN));
}
//产生数据表结构
if (!sqlite_query($db, "DROP TABLE test")) {
 exit(error_code(-3, LN));
}
if (!sqlite_query($db, "CREATE TABLE test (id integer primary key,pid integer,name varchar(10) UNIQUE)")) {
 exit(error_code(-3, LN));
}
//插入一条数据
if (!sqlite_query($db, " INSERT INTO test (name) VALUES ('heiyeluren') ")) {
 exit(error_code(-4, LN));
}
//把数据检索出来
if (!($result = sqlite_query($db, "SELECT * FROM test"))) {
 exit(error_code(-5, LN));
}

//获取检索数据并显示
while ($array = sqlite_fetch_array($result)) {
 echo "ID: ". $array[id] ."
Name: ". $array[name] ;
}

/* 错误信息代码函数 */
function error_code($code, $line_num, $debug=DEBUG)
{
 if ($code<-6 || $code>-1) {
  return false;
 }
 switch($code) {
  case -1: $errmsg = "Create database file error.";
   break;
  case -2: $errmsg = "Open sqlite database file failed.";
   break;
  case -3: $errmsg = "Create table failed, table already exist.";
   break;
  case -4: $errmsg = "Insert data failed.";
   break;
  case -5: $errmsg = "Query database data failed.";
   break;
  case -6: $errmsg = "Fetch data failed.";
   break;
  case -7: $errmsg = "";
   break;
  default: $errmsg = "Unknown error.";
 }

 $m = "[ Error ]
File: ". basename(FL) ."
Line: ". LN ."
Mesg: ". $errmsg ."";
 if (!$debug) {
  ($m = $errmsg);
 }
 return $m;
}

?>

如果你操作无误的话,那么程序最后输出:

ID: 1
Name: heiyeluren


我们以上的程序包括了比较完整的功能,有调试、异常处理、存取数据库等功能,算是一个简单应用。如果你有兴趣也可以进行扩展。

* 结束:

我们基本的操作就讲到这里,以后有空我会把内容补全。如果大家有兴趣可以去研究一下,也许你的个人主页就需要这样的小型数据库来帮助你。


* 参考文档:
http://www.donews.net/limodou/archive/2004/03/21/7997.aspx
http://www.linuxsir.org/bbs/showthread.php?p=1213668#post1213668

* SQLite资源
官方网站:http://www.sqlite.org
SQL语法: http://www.sqlite.org/lang.html
开发文档:http://www.sqlite.org/docs.html
常见问题:http://www.sqlite.org/faq.html
下载地址:http://www.sqlite.org/download.html


Author: heiyeluren
Date: 2005-8-5




code                         insert   SQL insert statements for TABLE                         line     One value per line                         list     Values delimited by .separator string                         tabs     Tab-separated values                         tcl      TCL list elements.nullvalue STRING      Print STRING in place of NULL values.output FILENAME       Send output to FILENAME.output stdout         Send output to the screen.prompt MAIN CONTINUE  Replace the standard prompts.quit                  Exit this program.read FILENAME         Execute SQL in FILENAME.schema ?TABLE?        Show the CREATE statements.separator STRING      Change separator used by output mode and .import.show                  Show the current values for various settings.tables ?PATTERN?      List names of tables matching a LIKE pattern.timeout MS            Try opening locked tables for MS milliseconds.width NUM NUM ...     Set column widths for "column" modesqlite>
使用PHP进行SQLite数据库操作 SQLite是一种轻量级的嵌入式数据库引擎,它可以在没有服务器的情况下直接访问和操作数据库文件。PHP是一种流行的服务器端脚本语言,可以与SQLite集成,提供数据库操作功能。本文将介绍如何使用PHP进行SQLite数据库操作。 阅读详情

相关推荐

Havalite CMS:Havalite,一个基于phpSQLite的轻量级开源CMS博客-开源

Havalite,一个基于 phpSQLite db 的轻量级开源 CMS 博客。 它是根据 GNU 通用公共许可证获得许可的。

php 操作sqlite

php 操作sqlite sqlite数据库

睡觉不打呼噜的博客 3968

基于PHP+SQLite的WebOS界面CMS/Blog程序--fcontex

fcontex是开源的基于PHP+SQLite技术的内容管理系统(CMS),同时支持MySQL数据库,用于快速构建中小型企业网站和个人博客(Blog)。 主要特点: 1、默认使用轻量的SQLite数据库,灵活方便; 2、全新的Web OS后台界面,清爽流畅; 3、全Ajax操作体验; 4、完全模块化设计,自由扩展,适合团队协作开发使用; 5、前端统一路由,支持重写的URL路径设计,对搜索引擎更加友好; 6、多用户支持,精细的用户权限控制; 7、支持RSS日志输出,方便用户订阅关注; 8、批量文件上传支持,集中化图片和附件管理,不产生垃圾文件; 9、缓存化的模板引擎设计,带来优秀的并发性能; fcontex采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议进行许可,详见:http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh fcontex官方网站:http://www.fcontex.com/ 点击默认主题页脚的“Login”可登录后台,默认用户名admin密码admin,运行环境:建议PHP5.2x,开启SQLite模块即可。 enjoy it!

数据库操作 —— 查询语句小结

                  为方便理解,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述。  1.在查询结果中显示列名:  a.用as关键字:select name as 姓名 from students order by age  b.直接表示:select name 姓名 from students order by age  2.精确

659

45个非常有用的 Oracle 查询语句小结

日期/时间 相关查询 1.获取当前月份的第一天运行这个命令能快速返回当前月份的第一天。你可以用任何的日期值替换 “SYSDATE”来指定查询的日期。 代码如下: SELECT TRUNC (SYSDATE, 'MONTH') "First day of current month" FROM DUAL; 2.获取当前月份的最后一天 这个查询语句类似于上面那...

121

数据库技术查询语句的种类和用法用途

查询语句在各个数据库的地位十分重要是维护数据库不可缺少的语句。

2301_81067040的博客 1260

数据库操作语句小结

数据库操作语句小结 为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述。   1.在查询结果中显示列名: ...

weixin_34015336的博客 80

java中sql查询语句_JAVA中用 SQL语句操作小结

1、添加记录(INSERT)使用SQL语句的INSERT命令可以向数据库中插入记录,INSERT命令的基本形式为:INSERT INTO 表名[(字段名1,字段名2…)] VALUES (值1,值2,…)若在输入记录时,每个字段均有内容,可省略表名后的字段名。该SQL语句用于将值1,值2……值n分别赋给字段1,字段2,……字段n,并为表增加一条记录。在使用该命令时要注意下面两个规则:插入的值必须...

weixin_30444517的博客 2777

电话簿(PHP+SQLite

使用PHP+SQLite实现的一个简单的电话簿程式,可以作为学习SQLite数据库的参考

Mysql数据库操作命令行小结

-- 创建数据库 create database python_test_1 charset=utf8; -- 使用数据库 use python_test_1; -- students表 create table students( id int unsigned primary key auto_increment not null, name varc...

weixin_33682790的博客 74

MySQL小结

文章目录MySQL检查本机是否安装过MySQL安装数据库提供解压版安装所需要的配置文件使用指令来完成数据库MySQL的安装初始化数据库安装数据库服务!启动MySQL服务登陆MySQL数据库修改登陆密码重新登陆测试数据库的基本概念数据管理阶段关系型数据库阶段结构化查询语句阶段数据定义语言数据操作语言数据库控制语言商业数据库阶段面向对象数据库MySQL数据库的版本介绍数据库操作创建数据库删除数据库存储...

weixin_45292690的博客 274

数据库学习小结和mybatis的使用小结

数据库查询语句的通用语法 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段 HAVING 分组之后的条件 ORDER BY 排序 LIMIT 分页限定 数据库内连接查询 隐式内连接查询 SELECT t1.name,t1.gender,t2.name FROM emp t1,dept t2 WHERE t1.dept_id = ...

Fitz的博客 379

数据库sql优化小结

这块了解的不是很多,根据经验大致分sql查询和更新语句优化,设定索引优化,外部查询数据库Io优化等,下面大致介绍下: 1、查询语句优化 a、查询where条件优化,查询时候是按照右后到前进行,后面条件先执行,所以对大数据量过滤条件来说,应该放到最后面;多表联合查询,比如from a,b表也是按照从后到前顺序,先筛选b表,最后合并,一般把数据少表作为基础表效率更高;对应多表查询,一般把交叉表作为

Q_zx1bydcom的专栏 477

Java中jdbc的学习小结

参考: link Java中jdbc的学习小结 jdbc指数据库驱动程序,可以使用jdbc与数据库建立连接,对数据库进行操作。 具体包含以下步骤: 1、加载数据库驱动 //mysql数据库 Class.forName("com.mysql.jdbc.Driver"); 2、建立连接,将url,uesrname,password给连接对象 Connection conn = null; conn ...

weixin_45758512的博客 222

JDBC小结

syq注入就像是一个bug,当你使用statement查询语句,来模拟登入操作时,只要在密码那里输入恒等式("' or '1' = '1"),就会显示登入成功,所以不太安全,这边需要使用的就是statement的升级版prepardStatement,这个方法的好处就是在于在执行数据库查询语句时会先进行一波预编译,且会用占位符来进行操作,这波预编译会将带有特殊符号的字符串转换成普通的字符串,而statement查询时则是直接字符串查询;2:需要先加载一个驱动包,这边需要注意的是得因正确的包到Driver;

2301_77114780的博客 685

Oracle千万条记录插入与查询小结

最近做了个项目,实现对存在千万条记录的库表进行插入、查询操作。原以为对数据库的插入、查询是件很容易的事,可不知当数据达到百万甚至千万条级别的时候, 这一切似乎变得相当困难。几经折腾,总算完成了任务。在此做些简单的小结,不足之处,还望javaeye的高手们帮忙补充补充! 1、 避免使用Hibernate框架 Hibernate用起来虽然方便,但对于海量数据的操作显得力不从心。 关于插入: 试过用Hi

leo_net的专栏 455

NoSQL 语句小结(上课自用)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录数据库操作建立数据库查看已有的数据库删除数据库(必须进入待删除的数据库当中)集合操作(必须进入待操作的数据库当中)建立集合查看所有集合删除集合数据操作插入数据插入集合插入数组(不是)/插入多条数据插入值中有“类”或数组补充更新数据命令参数基础语法修改数据增加值(加减)增加值(乘除)删除字段修改集合中的数组内的信息利用update实现插入操作利用update检错删除数据删除所有符合条件的数据删除一条符合条件的数据删除所有数据查询数据.

loi_王振东 3285
上一篇: PHP中模板分页的处理
下一篇: 使用JavaScript写的操作系统和输入法程序
hejishan
博客等级 码龄19年 1263粉丝 7368原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值