php与sqlite3 | 打你个西瓜 php sqlite3
打开php.ini的扩展:
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll
=====================================
PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用
PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力;与ADODB和MDB2相比,PDO更高效。
目前而言,实现“数据库抽象层”任重而道远,使用PDO这样的“数据库访问抽象层”是一个不错的选择。
PDO中包含三个预定义的类,它们分别是PDO、PDOStatement 和 PDOException。
=====================================
常用语句
参考 :http://cn.php.net/manual/en/book.sqlite3.php
//创建数据库
$dbname2=”database/eit/20120825.db”;
$dbh2 =new PDO(“sqlite:”.$dbname2); //建立连接,确保无此文件
$dbh2->exec(“CREATE TABLE [program] ([id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,[channel_id] INTEGER NULL,[time_start] NUMERIC NULL,[time_end] NUMERIC NULL,[type_name] TEXT NULL,[title] TEXT NULL,[director] TEXT NULL,[present] TEXT NULL,[description] TEXT NULL);”);
//建立连接
$dbname=”database/database.db”;
$dbh =new PDO(“sqlite:”.$dbname);
//添加行
$sql=”insert into program (channel_id,title,time_start,time_end) values (“.$program_now["channel_id"].”,’”.$program_name.”‘,”.$program_now["time_start"].”,”.$program_now["time_end"].”)”;
$dbh_out->exec($sqlt);
//删除行
$sql=”delete from property”;
$dbh->exec($sql);
//修改行
$sql=”update property set level=”.$level.” where orin_id=”.$id;
$dbh->exec($sql);
//单条查询
$sql=”select * from property where id=1″;
$result=$db->query($sql );
$row = $results->fetch();//单条数据
echo ( $row["orin_id"], $row["parent_id"], $row["name"] );
//多条查询 普通方式
$sql=”select * from property”;
$results = $db->query($sql);
while ($row = $results->fetchAll()) {
var_dump($row);
}
//多条查询 statement方式
$sql=”select * from property”;
$sth = $dbh->prepare($sql);
$sth->execute();
$result = $sth->fetchAll();
echo(count($result));//查询结果的数量
foreach($result as $row)
{
$channel_list_arr[$channel_list_index]=array($row["orin_id"], $row["parent_id"], $row["name"]);
}
//事务处理
$dbh->beginTransaction();
…
$dbh->commit();
=====================================
使用事务操作数据库,尤其是频繁读写数据库文件,效率会有明显提升!
从2.0版开始,SQLite支持带有回退和原子性的提交的事务处理。
可选的事务名称会被忽略。SQLite目前不允许嵌套事务。
在事务之外,不能对数据库进行更改。如果当前没有有效的事务,任何修改数据库的命令(基本上除了SELECT以外的所有SQL命令)会自动启动一个事务。命令结束时,自动启动的事务会被提交。
可以使用BEGIN命令手动启动事务。这样启动的事务会在下一条COMMIT或ROLLBACK命令之前一直有效。但若数据库关闭 或出现错误且选用ROLLBACK冲突判定算法时,数据库也会ROLLBACK。查看ON CONFLICT子句 获取更多关于ROLLBACK冲突判定算法的信息。
在SQLite 3.0.8或更高版本中,事务可以是延迟的,即时的或者独占的。“延迟的”即是说在数据库第一次被访问之前不获得锁。 这样就会延迟事务,BEGIN语句本身不做任何事情。直到初次读取或访问数据库时才获取锁。对数据库的初次读取创建一个SHARED锁 ,初次写入创建一个RESERVED锁。由于锁的获取被延迟到第一次需要时,别的线程或进程可以在当前线程执行BEGIN语句之后创建另外的事务 写入数据库。若事务是即时的,则执行BEGIN命令后立即获取RESERVED锁,而不等数据库被使用。在执行BEGIN IMMEDIATE之后, 你可以确保其它的线程或进程不能写入数据库或执行BEGIN IMMEDIATE或BEGIN EXCLUSIVE. 但其它进程可以读取数据库。 独占事务在所有的数据库获取EXCLUSIVE锁,在执行BEGIN EXCLUSIVE之后,你可以确保在当前事务结束前没有任何其它线程或进程 能够读写数据库。
有关SHARED, RESERVED, 和EXCLUSIVE锁可以参见这里。
SQLite 3.0.8的默认行为是创建延迟事务。SQLite 3.0.0 到3.0.7中延迟事务是唯一可用的事务类型。SQLite 2.8或更早版本中,所有的事务 都是独占的。
COMMIT命令在所有SQL命令完成之前并不作实际的提交工作。这样若两个或更多个SELECT语句在进程中间而执行COMMIT时,只有全部SELECT 语句结束才进行提交。
执行COMMIT可能会返回SQLITE_BUSY错误代码。这就是说有另外一个线程或进程获取了数据库的读取锁,并阻止数据库被改变。当COMMIT获得该错误代码时,事务依然是活动的,并且在COMMIT可以在当前读取的线程读取结束后再次试图读取数据库。
=====================================
更多阅读
女记者做心灵回溯与自己的两个堕胎孩子沟通、拥抱半透明的婴灵、 怎么超度堕胎婴灵
女记者做心灵回溯与自己的两个堕胎孩子沟通、拥抱半透明的婴灵、超度牠们到极乐转载2012年5月8日看到一文《堕胎后婴灵究竟去了哪里?》我看后写了评:“我见过婴灵,四五岁孩子大小,透明的。当我读护诸童子陀罗尼经后。赞叹博主慈悲,希望众
口水观点 关于腾讯与360打架你应该知道的那些事儿 那年那兔那些事儿腾讯
关于腾讯与360打架你应该知道的那些事儿话说,打11月3号开始,好戏上演了。腾讯哥非常威武的直接有你没我。本来我还电脑前一
每次启动搜狗输入法打第一个词 都很慢 - 拼音历史帖子 - 拼音综合 搜狗拼音输入法
每次启动搜狗输入法打第一个词 都很慢搜狗拼音3.X版在“设置属性”-常规-网址数据自动更新-取消打钩在“设置属性”-细胞词库-取消细胞词库自动更新
打你个大西瓜 饺克力微博
国产动画最优秀的作品 一部网络上热传的名为《打,打个大西瓜》的动画片风靡网络,受到网友的热烈追捧,视频画面震撼,内容诱人,被众多网友称之为“国产动画最优秀的作品”,“华人最牛原创动画短片”。作者花了3年多的时间制作这16分钟的
PPT版面设计与制作的10个妙招 小学美术版面设计ppt
PPT版面设计与制作的10个妙招一个成功的PPT课件,除了内容要精彩之外,漂亮的页面设计也很重要,这样就能在第一时间吸引学生。下面的这10条小技巧,可助你一臂之力,提高你设计并制作PPT课件的效率。(1)使用网格对齐对象通过网格,PowerPoint可以