輕型數據庫SQLite結合PHP的開發

http://blog.csdn.net/guoguo1980/article/details/769788

SQLite是一款輕型的數據庫,它的設計目標是嵌入式的,並且目前已經在不少嵌入式產品中使用了它,它佔用資源很是的低,在嵌入式設備中,可能只 須要幾百K的內存就夠了。它可以支持Windows/Linux/Unix等等主流的操做系統,同時可以跟不少程序語言相結合,好比Tcl、PHP、 Java等,還有ODBC接口,一樣比起Mysql、PostgreSQL這兩款開源世界著名的數據庫管理系統來說,它的處理速度比他們都快。php

 


輕型數據庫SQLite結合PHP的開發html

SQLite是一款輕型的數據庫,它的設計目標是嵌入式的,並且目前已經在不少嵌入式產品中使用了它,它佔用資源很是的低,在嵌入式設備中,可能只 須要幾百K的內存就夠了。它可以支持Windows/Linux/Unix等等主流的操做系統,同時可以跟不少程序語言相結合,好比Tcl、PHP、 Java等,還有ODBC接口,一樣比起Mysql、PostgreSQL這兩款開源世界著名的數據庫管理系統來說,它的處理速度比他們都快。java

SQLite雖然很小巧,可是支持的SQL語句不會遜色於其餘開源數據庫,它支持的SQL包括:mysql

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 linux

同時它還支持事務處理功能等等。也有人說它象Microsoft的Access,有時候真的以爲有點象,可是事實上它們區別很大。好比SQLite 支持跨平臺,操做簡單,可以使用不少語言直接建立數據庫,而不象Access同樣須要Office的支持。若是你是個很小型的應用,或者你想作嵌入式開 發,沒有合適的數據庫系統,那麼如今你能夠考慮使用SQLite。目前它的最新版本是 3.2.2,它的官方網站是:http://www.sqlite.org,能在上面得到源代碼和文檔。同時由於數據庫結構簡單,系統源代碼也不是不少,也適合想研究數據庫系統開發的專業人士。sql

如今咱們開始簡單的介紹,主要我是想講清楚幾個問題,一是如何安裝使用,二是如何跟PHP結合開發。shell

1、安裝數據庫

1. Windows平臺express

下載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 windows

# 咱們建立一個數據庫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差很少,改天把這部份內容補上。

 

2、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數據庫文件,咱們對該文件進行操做:


<?php
//打開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程序來完成建立一個數據庫,而且執行簡單的創建數據表,插入數據和檢索數據的功能。

首先咱們來看代碼:(代碼比較長,但比較容易理解)

<?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

 


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
閱讀(485) | 評論(0) | 轉發(0) |
給主人留下些什麼吧!~~
評論熱議
相關文章
相關標籤/搜索