“第十课--microWRT 应用开始之数据库”的版本间的差异
(→SQLite 数据库介绍) |
(→SQLite 数据库介绍) |
||
第71行: | 第71行: | ||
//准备输出 | //准备输出 | ||
$output=""; | $output=""; | ||
− | while ($row = $result->fetchArray(SQLITE3_ASSOC)) { | + | while ($row = $result->fetchArray(SQLITE3_ASSOC)) |
− | $output.=" | + | { |
− | $output.=" | + | $output.="<b>name: </b> ".$row['name']; |
+ | $output.="<b>age: </b> ".$row['age']; | ||
} | } | ||
$result->finalize(); //输出结束 | $result->finalize(); //输出结束 |
2015年5月17日 (日) 12:56的版本
上一节教程中我们介绍了如何在microWRT上搭建服务器,那仅仅是个框架,任何服务器都离不开数据库的支持。我们耳熟能详的数据库就是MySQL,但是它的个头比较大。 对于小型的嵌入式设备有时候不是很合适。所以在一些小型设备上,经常会用到一些轻量级的关系数据库。本节教程就来介绍一款常见的数据库Sqlite,为了满足其他一些 更高级的需要,本教程也简单介绍了MySql数据在microWRT的使用。
SQLite 数据库介绍Sqlite是一款轻量级的关系型数据库,它主要是为嵌入式系统而设计的,因此它本身占用的系统资源比较少,没有进程的概念,没有严格的数据结构限制。 并且语法保持了和其他关系型数据库高度的一致性,是使用者可以很容易的上手使用。基于上述的各种特点,它非常适合用openwrt这样的嵌入式系统。 目前Sqlite3 是SQLite的最新版本,关于Sqlite的详细资料,可以参考官网。 http://www.sqlite.org 1. SQLite 的特点 1)SQLite 没有服务,它总是嵌入到各种编程语言总,不需要连接到一个数据库服务。不像MySQL,它在运行的时候需要起一个demon程序。 2)SQLite 中没有数据库的概念,虽然你可以创建一个数据库,但是它的本质就是一个文件,所有对数据的操作都是文件来实现的。 3)SQLite 采用I/O直接操作,因此它的性能非常高,但是也正是它的这特点带来一个问题,那就是访问数据的同步问题,需要通过加锁机制解决这个问题。但是SQLite他把表分离成不同的文件,这样也就间接解决了这个问题。 4)SQLite 在稳定性上也比较好,尤其是断电异常及保护机制。 2. SQLite 的安装 上面我们已经提到SQLite没有所谓的SQLite服务,在各种语言中已经包含了相关的库,直接调用就好了。基于这种原理,我们只要在microWRT上安装SQLite命令, 就可以在命令行下查看,操作数据文件。 安装SQLite命令,如果固件基于openwrt的BB版本,可以直接运行下面的命令来安装。 root@microWrt:~# opkg update root@microWrt:~# opkg install sqlite3-cli 3. SQLite 的操作 创建数据库 root@OpenWrt:~# sqlite3 /mnt/sda/test_sqlite3.db SQLite version 3.8.7.4 2014-12-09 01:34:36 Enter ".help" for usage hints. sqlite> 创建表,包含两个column,name 和age。 create table test( name varchar(60), age int(3) ); 插入数据,查看数据 sqlite> insert into test(name,age) values('Jason','30'); sqlite> insert into test(name,age) values('Tiki','34'); sqlite> select * from test;
为了保证PHP能够使用SQLite,需要先安装一个支持包。 root@microWrt:~# opkg install php5-mod-sqlite3 下面的程序实现了一个查询数据库的web程序。 <?php //打开数据库文件,以读写形式,如果文件不存在就尝试创建 $db = new SQLite3("/mnt/sda/test_sqlite3.db",SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE); //设置sqlite存储编码 $db->query('PRAGMA encoding="UTF-8"'); //设置sqlite同步缓存方式 $db->query('PRAGMA synchronous = NORMAL'); //查询 $result=@$db->query("select * from test"); if ($db->lastErrorCode() !== 0) { //如果查询有错则显示错误 echo "Error: ".$db->lastErrorMsg(); exit; } //准备输出 $output=""; while ($row = $result->fetchArray(SQLITE3_ASSOC)) { $output.="name: ".$row['name']; $output.="age: ".$row['age']; } $result->finalize(); //输出结束 //关闭数据库 $db->close(); ?> <html> <head> <title> MicroWRT </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body style="background-color: #f3f3f3"> <?=$output;?> </body> </html> 运行程序后的输出为: name:Jason age:30 name:Tiki age:32 MySQL 数据库介绍MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,已经被Oracle公司收购。MySQL是最流行的关系型数据库管理系统, 在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 关于MySQL的详细介绍,请参考官网:http://www.mysql.com 就如本节教程开始所讲,在嵌入式系统中安装MySQL不是很合适,因为系统CPU性能不是很强。
安装MySQL root@microWrt:~# opkg install mysql-server 注意:一般需要把MySQL安装入U盘,所以需要用”-d 安装路径“ MySQL的库存储位置一般在/var/lib下,由于OpenWrt的var文件夹是内存临时文件目录,所以我们要重新定义这部分路径信息。 准备库文件存储位置 root@microWrt:~# mkdir -p /mnt/sda/data /mnt/sda/data/mysql /mnt/sda/data/tmp 初始化默认的MySQL数据 root@microWrt:~# mysql_install_db --force 2. MySQL启动 设置启动服务 root@microWrt:~# /etc/init.d/mysql enable 手工启动一次 root@microWrt:~# /etc/init.d/mysql start 3. 使用PHP操作MySQL 对于MySQL操作,在网上可以找到大量的例子,本文只是提供一个简单的测试例子。 安装PHP的MySQL支持 root@OmicroWrt:~# opkg install php5-mod-mysql 一个查询数据库的WEB例子 <?php //简单演示MySQL的连接是否成功 $link = mysql_connect('127.0.0.1', 'root', ); if (!$link) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_close($link); ?> |