仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1639|回复: 18
打印 上一主题 下一主题

[学习教程] PHP教程之轻型数据库SQLite联合PHP的开辟

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
完成一个功能齐全的动态站点数据|数据库   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、装置
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 <table> 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  WordStr 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" mode
sqlite>

# 咱们创立一个数据库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] ."<br>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 = "<b>[ Error ]</b><br>File: ". basename(FL) ." <br>Line: ". LN ."<br>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

对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。
活着的死人 该用户已被删除
沙发
发表于 2015-2-4 09:41:30 | 只看该作者
做为1门年轻的语言,php一直很努力。
山那边是海 该用户已被删除
板凳
发表于 2015-2-4 18:48:22 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
蒙在股里 该用户已被删除
地板
发表于 2015-2-13 10:53:48 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
5#
发表于 2015-3-3 19:55:09 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
admin 该用户已被删除
6#
发表于 2015-3-7 02:33:47 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-14 03:38:01 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-20 23:54:03 | 只看该作者
爱上php,他也会爱上你。
冷月葬花魂 该用户已被删除
9#
 楼主| 发表于 2015-3-22 22:29:59 | 只看该作者
当然这种网站的会员费就几十块钱。
透明 该用户已被删除
10#
发表于 2015-4-4 11:26:14 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
乐观 该用户已被删除
11#
发表于 2015-4-5 20:36:16 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
小妖女 该用户已被删除
12#
发表于 2015-4-6 05:03:22 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
变相怪杰 该用户已被删除
13#
发表于 2015-4-12 08:16:08 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
小魔女 该用户已被删除
14#
发表于 2015-4-12 11:26:05 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
简单生活 该用户已被删除
15#
发表于 2015-4-21 20:12:09 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
再见西城 该用户已被删除
16#
发表于 2015-4-22 09:16:15 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
兰色精灵 该用户已被删除
17#
发表于 2015-4-26 09:11:38 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
只想知道 该用户已被删除
18#
发表于 2015-5-1 13:11:41 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
不帅 该用户已被删除
19#
发表于 2015-6-4 10:58:12 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-13 15:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表