php与sqlite3 | 打你个西瓜 php sqlite3

目前下载的支持php的套装软件(如xampp,phpnow,easyphp)都默认不支持sqlite3.dll的扩展,除非你重新编译,需要php支持sqlite3,可以采用pdo方式

打开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;
php与sqlite3 | 打你个西瓜 php sqlite3

$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可以在当前读取的线程读取结束后再次试图读取数据库。

=====================================

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/95073.html

更多阅读

打你个大西瓜 饺克力微博

国产动画最优秀的作品 一部网络上热传的名为《打,打个大西瓜》的动画片风靡网络,受到网友的热烈追捧,视频画面震撼,内容诱人,被众多网友称之为“国产动画最优秀的作品”,“华人最牛原创动画短片”。作者花了3年多的时间制作这16分钟的

PPT版面设计与制作的10个妙招 小学美术版面设计ppt

PPT版面设计与制作的10个妙招一个成功的PPT课件,除了内容要精彩之外,漂亮的页面设计也很重要,这样就能在第一时间吸引学生。下面的这10条小技巧,可助你一臂之力,提高你设计并制作PPT课件的效率。(1)使用网格对齐对象通过网格,PowerPoint可以

声明:《php与sqlite3 | 打你个西瓜 php sqlite3》为网友小心眼分享!如侵犯到您的合法权益请联系我们删除