1、使用DBM数据库
使用情况:有一些适合用键/值对形式来表示的数据,希望安全地把数据存储起来,并且希望能够基于那些键来快速地找到相关信息。
使用DBA抽象层访问一个DBM式的数据库。
使用范例:
$dbh = dba_open('fish.db', 'c', 'gdbm') or die('error in open');
if(dba_exists('flower', $dbh)){
$flower_count = dba_fetch('flower', $dbh);
$flower_count++;
dba_replace('flower', $flower_count, $dbh);
} else {
dba_insert('flower', 1, $dbh);
}
dba_delete('tilapia', $dbh);
for($key=dba_firstkey($dbh);$key!==false;$key=dba_nextkey($dbh)){
$value = dba_fetch($key, $dbh);
}
dba_close($dbh);
通过使用dba_firstkey()和dba_nextkey()来迭代遍历一个DBM文件中的所有键,使用dba_fetch()取得每个键对应的值。
DBM数据库是对使用纯文本文件的一种提升,主要是数据结构局限于键值对形式和锁定功能不够健壮,DBM处理程序对于频繁访问只读数据的应用来说是个不错的选择。
2、使用SQLite数据库
sqlite是与php捆绑的健壮的,不需要运行独立服务器的数据库,一个SQLite数据库就是一个文件。
3、PDO:php数据对象,扩展为PHP访问数据库定义了一个轻量级的一致接口了,实现PDO接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。但是PDO扩展自身并不能实现任何数据库功能,必须使用一个具体数据库的PDO驱动来访问数据库服务。
PDO提供了一个数据访问抽象层,这意味着不管使用哪种数据库,都可以用相同的函数来查询和获取数据。
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
4、操作sql数据库
1)通过命名的占位符来指定sql参数
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
2)通过?占位符来指定sql参数
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();
5、记录调试信息和错误
在执行某个操作失败后使用PDO::errorCode()或PDOStatement::errorCode()方法来获得相应的错误代码。对应的errorInfo()方法则返回有关该错误的详细信息。
6、创建唯一的标识符
使用uniqid()函数生成一个标识符。同时,为了限制标识符中的字符范围,将标识符传递到md5()函数中,返回一个只包含数字和字母a-f组成的字符串。
uniqid()使用当前的时间(毫秒)和随机数来生成字符串,md5()则将传递给它的字符串转换成相应的散列,不会给标识符中添加任何随机性,只是限制标识符中出现的字符范围。
7、缓存结果
使用pear的Cache_Lite包,这个包使得缓存任何数据都很简单。Cache_Lite是缓存任何信息的一种普通的、轻量级的机制。它把缓存的信息保存在文件中,Cache_Lite构造器接受一个用于控制其行为的选项数组作为参数。
require_once "Cache/Lite.php";
$options = array(
'cacheDir' => '/tmp/',
'lifeTime' => 7200,
'pearErrorMode' => CACHE_LITE_ERROR_DIE
);
$cache = new Cache_Lite($options);
if ($data = $cache->get('id_of_the_page')) {
// Cache hit !
// Content is in $data
echo $data;
} else {
// No valid cache found (you have to make and save the page)
$data = 'test this is a test
';
echo $data;
$cache->save($data);
}
缓存中保存的只是键值的映射,用于唯一标识要缓存数据的缓存键。缓存中的数据可以根据Cache_Lite::clean()方法来删除缓存中的数据;也可以通过给定的Cache_Lite::remove()来指定删除特定的缓存。
Cache_Lite::extendLife();- 重新设定缓存文件的时间,为当前系统时间
constructor Cache_Lite::Cache_Lite() – 构造函数
Cache_Lite::get() – 测试cache是否存在 并(如果是) 返回它
Cache_Lite::save() – 保存数据到一个cache 文件
Cache_Lite::remove() – 删除一个cache文件
Cache_Lite::clean() – 清除cache
Cache_Lite::setToDebug() –设置为调试模式
Cache_Lite::setLifeTime() – 设置新的生命周期
Cache_Lite::saveMemoryCachingState() --
Cache_Lite::getMemoryCachingState() --
Cache_Lite::lastModified() – 返回cache最后更新时间。
Cache_Lite::raiseError() – 触发一个 PEAR 错误
constructor Cache_Lite_Output::Cache_Lite_Output() -- 构造函数
Cache_Lite_Output::start() – 测试是否一个cache有效 并(如果有效)返回它输出到浏览器. 否则,激活输出缓冲.
Cache_Lite_Output::end() – 停止由start()方法开始的输出缓冲并且保存输出到一个cache文件
constructor Cache_Lite_Function::Cache_Lite_Function() -- 构造函数
Cache_Lite_Function::call() – 调用一个可缓冲的函数或方法 (如果已经有个一个cache则不进行调用)
8、单例模式-在程序的任何地方都能访问数据库连接
public static function GetInstance()
{
if(self::$instance == null)
{
self::$instance = new CBalanceDb();
}
return self::$instance;
}
可以程序中的任何地方访问它,而不用担心变量作用域的问题,并且可以防止程序创建第二个连接。