介绍
这是嵌入式SQL数据库引擎SQLite(SQLite Embeddable SQL Database Engine)的一个扩展。SQLite是一个实现嵌入式SQL数据库引擎的 C语言库(C library)。用SQLite连接的程序可以使用SQL数据库,但不需要运行一个单独的关系型数据库管理系统进程(separate RDBMS process)。
SQLite不是一个用于连接到大型数据库服务器(big database server)的客户端库(client library)。SQLite是一个服务器。SQLite直接读写(reads and writes directly)在硬盘上的数据库文件。
注:更多关于SQLite的资料请查看SQLite的网站(http://sqlite.org/)。
手册
SQLite 手册(原版)下载:http://www.cr173.com/soft/19894.html
SQLite 中文帮助文档下载:http://www.docin.com/p-77605082.html
安装
请阅读在安装包里的 INSTALL 文件。或者使用PEAR installer with “pear install sqlite”。SQLite已经内置了,你不需要安装任何附加的软件(additional software)。
Windows users可以下载SQLite扩展DLL(php_sqlite.dl)。
需求
为了可以使用那些函数,你必须编译带上SQLite支持PHP(compile PHP with SQLite support),或者在你的php.ini加载SQLite扩展。
资源类型
有两个在SQLite界面(the SQLite Interface)可用的资源。第一个是数据库连接(the database connection),第二是计算结果设置(the result set)。
预定义常量
函数sqlite_fetch_array()和sqlite_current()使用一个常量表示不同的返回类型。下面的常量(表格 1.)已经被定义:
表格 1. SQLite 常量
常量名 意义
SQLITE_ASSOC Columns are returned into the array having the fieldname as the array index.
SQLITE_BOTH Columns are returned into the array having both a numerical index and the fieldname as the array index.
SQLITE_NUM Columns are returned into the array having a numerical index to the fields. This index starts with 0, the first field in the result.
运行时配置
这些函数的行为受到全局配置文件 php.ini 的影响。
表格 2. SQLite Configuration Options
Name Default Changeable
sqlite.assoc_case 0 PHP_INI_ALL
For further details and definition of the PHP_INI_* constants see ini_set().
以下是该配置选项的简要解释。
sqlite.assoc_case int
Whether to use mixed case (0), upper case (1) or lower case (2) hash indexes.
This option is primarily useful when you need compatibility with other database systems, where the names of the columns are always returned as uppercase or lowercase, regardless of the case of the actual field names in the database schema.
The SQLite library returns the column names in their natural case (that matches the case you used in your schema). When sqlite.assoc_case is set to 0 the natural case will be preserved. When it is set to 1 or 2, PHP will apply case folding on the hash keys to upper- or lower-case the keys, respectively.
Use of this option incurs a slight performance penalty, but is MUCH faster than performing the case folding yourself using PHP script.
目录
sqlite_array_query —— 发送一条 SQL 查询,并返回一个数组。
sqlite_busy_timeout —— 设置超时时间(busy timeout duration),或者频繁的用户失去权限(disable busy handlers)。
sqlite_changes —— 返回被最新的SQL 查询(changed by the most recent SQL statement)改变的行数。
sqlite_close —— 关闭一个打开的SQLite数据库。
sqlite_column —— 在当前的行中取得一列(a column from the current row of a result set)。
sqlite_create_aggregate —— Register an aggregating UDF for use in SQL statements。
sqlite_create_function —— Registers a “regular” User Defined Function for use in SQL statements。
sqlite_current —— 在返回的数组中取得当前的行(the current row from a result set as an array)。
sqlite_error_string —— 返回错误代码的原始描述(the textual description of an error code)。
sqlite_escape_string —— 释放一个用于查询的字符串(Escapes a string for use as a query parameter)。
sqlite_fetch_array —— 取得下一行并设置成一个数组(the next row from a result set as an array)。
sqlite_fetch_single —— 取得第一列并设置成一个字符串(Fetches the first column of a result set as a string)。
sqlite_fetch_string —— sqlite_fetch_single()的别名。
sqlite_field_name —— 取得结果中指定字段的字段名。
sqlite_has_more —— 返回是否有更多可用的行(whether or not more rows are available)。
sqlite_last_error —— 返回数据库的最新的错误代码(the error code of the last error for a database)。
sqlite_last_insert_rowid —— 返回最新插入的行的行号(the most recently inserted row)。
sqlite_libencoding —— 返回SQLite库(SQLite library)的编码(encoding)。
sqlite_libversion —— 返回SQLite库(SQLite library)的版本。
sqlite_next —— 返回下一行的行号。
sqlite_num_fields —— 取得结果集中字段的数目。
sqlite_num_rows —— 取得结果集中行的数目。
sqlite_open —— 打开一个SQLite数据库。如果文件不存在则尝试创建之。
sqlite_popen —— 用永久连接的方式打开一个SQLite数据库。如果文件不存在则尝试创建之。
sqlite_query —— 发送一条 SQL 查询,并返回一个结果句柄(a result handle)。
sqlite_rewind —— 倒回第一行(Seek to the first row number)。
sqlite_seek —— 在缓存结果中查找特定的行号(Seek to a particular row number of a buffered result set)。
sqlite_udf_decode_binary —— Decode binary data passed as parameters to an UDF。
sqlite_udf_encode_binary —— Encode binary data before returning it from an UDF。
sqlite_unbuffered_query —— 发送一条 SQL 查询,并不获取和缓存结果的行。
关于Sqlite的问答
为什么选择 SQLite 来捆绑而不用其它数据库?恐怕 PHP 想把 ASP 赶下台了。
对 于 PHP 所开发的留言本,整站等程序,为什么使用率比 ASP 低呢?很大原因是数据库的安装,对于一般用户,安装一个 MySQL 数据库相对比较难的,而 Access 则只需要修改数据库路径即可,数据库和站点文件放在一起,非常方便。现在好了,PHP5 将 SQLite 捆绑了,相信以后会出很多相关的应用程序,而这些应用程序的数据库安装相信可以和 ASP 媲美,速度又比 MySQL 快上 1-2 倍(官方的数据),存储量又不是问题(最大可超过 2TB-2000GB,官方数据)。只是对于并发访问我比较担心,还没有测试过不知道如何。呵呵,但是相信这是 PHP 的明智选择,即使服务器不支持 SQLite ,也可以通过加载 php_sqlite.dll 来实现 SQLite 的支持。恩,为什么没有早点想到使用它呢?恐怕是有以下几点原因:
1.当初还不健壮--即使现在也不知道是不是健壮,代码就那么几百K,呵呵,和 MySQL 对比起来……
2.感觉好像有点文件系统的味道,就一个数据库文件包含了所有数据……
3.不支持表的无损修改,也就是说不支持 ALTER TABLE ,这恐怕带来了不少麻烦。改变数据表结构就要重建表,不过有其他方法解决。
4.只支持 left join ,不过差不多够用了,对小型程序来说。
5.优化数据表恐怕比较麻烦。
优点还是很多的,我看了下:
1.安装方便
2.支持大量数据
3.支持大部分SQL
4.弱数据类型
5.速度快(没有测试,官方说法)
6.体积小
7.具备 Command 窗口,下载一个 SQLite.exe 文件即可对数据库进行命令行操作,和 MySQL 差不多的样子,不过显然不如 MySQL 友好和强大。
8.完全公开的源代码和版权