(5) PHP的环境下使用SQLite
1. PHP下的安装
在PHP5中, SQLite已作为默认支持的模块.在PHP4中你需要进行安装. 首先去http://pecl.php.net/package/SQLite 去下载到SQLite的扩展, 注意Windows下的版本需要去http://snaps.php.net/win32/PECL_STABLE/php_sqlite.dll 下载, 当然你也可以下载代码自己编译.事实上在linux下只需要使用命令: ‘pear install sqlite’就可以完成安装,而在Win下需要修改php.ini, 同样的使PHP4支持SQLite.
此时你已经无需再安装任何东西了, 而你也已经完全支持SQLite了, 一个简单, 快速, 可靠的数据库.
如果你需要一个管理软件, 那么你可以尝试使用SQLiteManager (www.sqlitemanager.org), 一个与PHPMyAdmin类似的针对SQLite的数据库管理系统.
2. 第一个使用SQLite的PHP程序.
我们创建一个叫binzy的数据库, 并创建一个叫Binzy的Table, 有2个字段, 分别是ID, Title. 而其中ID为INTEGER PRIMARY KEY, 即自增三主键. 并在其中插入了2条数据”Binzy”, “Jasmin”.
打开并显示数据:
if ($db = sqlite_open('../binzy.db', 0666, $sqliteerror))
{ // 打开
SQLite$result = sqlite_query($db,'select * from Binzy'); // 查询
while($row = sqlite_fetch_array($result)) // 获得结果
{
print 'ID=>'.$row['MyID'].', Name=>'.$row['Name'].''; }
} else {die ($sqliteerror);}
接下来Insert一条记录, 其中我们会使用到SQLite的事务.
if ($db = sqlite_open('../binzy.db', 0666, $sqliteerror)) {
sqlite_query($db,'BEGIN TRANSACTION'); // 开始事务
if (@sqlite_query($db,'insert into Binzy (Name) values (\'Binzy&Jasmin\')'))
{
print 'Execute Successfully';
sqlite_query($db,'COMMIT TRANSACTION'); // 提交事务
}
else
{
print sqlite_error_string(sqlite_last_error($db));
sqlite_query($db,'ROLLBACK TRANSACTION'); // 回滚事务
}
} else {
die ($sqliteerror);
}
是的, 如果你已经熟悉使用PHP对MySQL之类的数据库进行操作, 那么SQLite几乎是一样的, 而且更为简洁.
3. 使用Pear::DB (PHP4中)
上面的例子中我们是使用PHP的函数直接对SQLite进行访问, 这样的访问方式是不推荐使用的. 更好的方式是使用某种数据访问抽象层, 如Pear的DB. 下面是2中查询例子的重写. 使用某个数据访问抽象层会更方便更安全, 并且可以在需要进行数据库迁移的时候尽可能减小成本.
require_once('DB.php');
$dbh = DB::connect('sqlite://@localhost/../binzy.db?mode=0666'); // 打开
$dbh->setFetchMode(DB_FETCHMODE_ASSOC);
if (!DB::isError($dbh))
{
$result = $dbh->query('select * from Binzy'); // 查询
if (!DB::isError($result))
{
while($row = $result->fetchRow()) // 读取
{
print 'ID=>'.$row['MyID'].', Name=>'.$row['Name'].'';
}
$dbh->disconnect();
}
else
{
print($dbh->message);
$dbh->disconnect();
}
}
else
{
print($dbh->message);
$dbh->disconnect();
}
4. 使用Creole (PHP5中)
Creole是由phpdb.org开发的面向PHP5的数据访问抽象层. 关于Creole可参考本期中的《Creole :新兴数据抽象层》.
Pear::DB并没有针对PHP5进行改变, 只是因为PHP5对PHP4良好的兼容性, 使得Pear::DB在PHP5下仍能很好的工作. 所以在你使用PHP5的时候推荐使用Creole. require_once('creole/Creole.php');
$Connection = null;
try{
$Connection = Creole::getConnection('sqlite://@localhost/../binzy.db?mode=0644'); // 获得Connection
$rs = $Connection->executeQuery('select * from Binzy'); // Get ResultSet
while($rs->next())
{
print 'ID=>'.$rs->getInt('myid').', Name=>'.$rs->getString('name').'';
}
$Connection->close();
} catch(SQLException $exception) // Catch Exception
{
$Connection->close();
print $exception->getMessage();
}
(6) 总结
随着PHP5的即将到来, 给我们带来了许多新的语言特性, 使PHP更加适合于构建强大健壮的各类系统. 而随着PHP5一起走进PHP开发人员视线的SQLite则给我们带来了有别于MySQL的惊喜. 是的, 他简单却又强大, 稳定. 而在刚刚过去的六月底新版本的SQLite3已经Release了第一个测试版本, 不仅仅带来了新的文件结构, 也带来了许多新的特性.