PHP+Sqlite2和PHP+Sqlite3
PHP数据库连接篇,PDO连接sqlite数据库,Sqlite安装使用说明!
SQLite是一种轻量级的关系型数据库,可以内嵌在我们的应用程序中一起发布出去。
这样我们在部署应用的时候,就不需要额外数据库的支持了。
在PHP中如果要使用sqlite,只需开启php_sqlite3.dll扩展即可,非常方便。
下面是我曾经的一个项目中,自己编写的一个操作SQLite数据库的工具类。
【注意:】php5.3版本以前只支持到sqlite2。
SQLite3 扩展自 PHP 5.3.0 起已默认启用。 允许在编译时使用 --without-sqlite3 禁用之。
Windows 用户必须启用 php_sqlite3.dll 方可使用该扩展。自 PHP 5.3.0 起,此扩展的 DLL 文件 已包含于 Windows 版的 PHP 发行包中。
操作sqlite数据库两种方法( Sqlite3 ):
1)升级php版本;
2)PDO解决连接sqlite3;
PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层。
这样,无论你使用什么数据库,你都可以通过一致的函数执行查询和获取数据。
注意,你并不能使用PDO扩展本身执行任何数据库操作,你必须使用一个database-specific
PDO driver(针对特定数据库的PDO驱动)访问数据库服务器。
PDO下载地址:http://pecl.php.net/package/pdo
PDO_Sqlite 函数及语法:http://cn.php.net/manual/en/ref.pdo-sqlite.php
下载以后并行安装就可以了,PHP5.1已经内置了PDO的相关组件,我们要做的就是打开PHP.ini把PDO和PDO_sqlite启用了
extension=php_pdo.dll extension=php_pdo_sqlite.dll
如果是5.3及以上的配置:
extension=php_sqlite3.dll
1、查看一下Sqlite3类都有那些方法:
echo '<pre>'; print_r(get_class_methods('SQLite3')); echo '</pre>';
结果:
Array ( [0] => open [1] => close [2] => exec [3] => version [4] => lastInsertRowID [5] => lastErrorCode [6] => lastErrorMsg [7] => busyTimeout [8] => loadExtension [9] => changes [10] => escapeString [11] => prepare [12] => query [13] => querySingle [14] => createFunction [15] => createAggregate [16] => createCollation [17] => openBlob [18] => enableExceptions [19] => __construct )
关于方法用法可以去PHP官网查看,注意是看sqlite3部分哦!
PHP官网sqlite3说明:http://cn.php.net/manual/en/book.sqlite3.php
2、然后我们来做一些实例操作:
1):普通方式(Sqlite3,如果你的PHP是5.3以前,那么就要用下面的PDO方式)
<?php # 连接SQLite数据库,appAll.db $db = new SQLite3(dirname(__FILE__).'appAll.db'); # 设置数据库编码为utf-8(防止乱码) $db->exec('set names utf8'); # 【示例1:创建表操作】 $sql = " CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL COMMENT '用户名', `create_time` int(10) unsigned NOT NULL, `update_time` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户表'; "; $res = $db->query($sql); if($res){ echo '创建表成功<br/>'; }else{ echo '创建表失败<br/>'; } # 【示例2:添加数据操作】 $res = $db->exec("insert into user(id,name) values(3,'采石222')"); if($res){ echo '【执行添加操作,并返回数据在表中的ID是多少:】<pre>'; print_r($db->lastInsertRowID()); echo '</pre>'; }else{ echo '没有查询到相关数据<br/>'; } # 【示例3:更新数据操作】 $res = $db->exec("update user set name='小川3333+++之之' where id=3"); if($res){ echo '【执行更新操作,并返回受影响行数:】<pre>'; print_r($db->changes()); echo '</pre>'; }else{ echo '没有更新任何数据<br/>'; } # 【示例4:删除数据操作:】 $res = $db->exec("delete from user where id=2"); if($res){ echo '【执行删除操作,并返回受影响行数:】<pre>'; print_r($db->changes()); echo '</pre>'; }else{ echo '没有删除任何数据<br/>'; } # 【示例5:查询单个字段】跟查询单条记录差别在于没有了True $res = $db->querySingle("select name from user"); if($res){ echo '【查询单个字段:】<pre>'; print_r($res); echo '</pre>'; }else{ echo '没有数据<br/>'; } # 【示例6:统计记录数】 $res = $db->querySingle("select count(id) as count from user"); if($res){ echo '【统计记录数:】<pre>'; print_r($res); echo '</pre>'; }else{ echo '没有数据<br/>'; } # 【示例7:查询单条记录】如果没有指定字段会默认返回表中第一个字段 $res = $db->querySingle("select name from user",true); if($res){ echo '【查询单条记录:】<pre>'; print_r($res); echo '</pre>'; }else{ echo '没有数据<br/>'; } # 【示例8:查询多条记录】 $res = $db->query('SELECT * FROM user'); $data = []; if($res){ while ($row = $res->fetchArray(SQLITE3_ASSOC)) { $data[]= $row; } } if($data){ echo '【查询多条记录:】<pre>'; print_r($data); echo '</pre>'; }else{ echo '没有数据<br/>'; } # 关闭数据库链接 $db->close(); ?>
2):PDO方式连接(同样可以用在Sqlite其他版本的数据库哦)
<?php header("content-type:text/html;charset=utf-8"); # 【PDO连接sqlite数据库】 $pdo = new \PDO('sqlite:'.dirname(__FILE__).'appAll.db'); # 设置数据库编码为utf-8 $pdo->exec('set names utf8'); # 【查看PDO都有那些方法】 echo '<pre>'; print_r(get_class_methods('PDO')); echo '</pre>'; # 【示例1:创建数据库表】 $sql = "CREATE TABLE `user` ( `id` int(10), `name` varchar(50), `create_time` int(10), `update_time` int(10), PRIMARY KEY (`id`) ) "; $res = $pdo->exec($sql); if($res){ echo '创建表成功<br/>'; }else{ echo '创建表失败<br/>'; } # 【示例2:添加数据】:添加数据到company表中,并返回数据在表中的ID是多少! $res = $pdo->exec("insert into user(name) values('小川编程添加111')"); if($res){ echo '11添加成功数据ID为:'.$pdo->lastinsertid().'<br/>'; } $res = $pdo->query("insert into user(name) values('小川编程添加222')"); if($res){ echo '22添加成功数据ID为:'.$pdo->lastinsertid().'<br/>'; } # 【示例3:更新数据】: $res = $pdo->exec("update user set name='小川编程更新111' where id=2"); if($res){ echo '更新数据成功<br/>'; } $res = $pdo->query("update user set name='小川编程更新222' where id=2"); if($res){ echo '成功更新数据【'.$res->rowCount().'】条<br/>'; } # 【示例4:删除数据】: $res = $pdo->exec("delete from user where id=3"); if($res){ echo '删除数据成功<br/>'; } $res = $pdo->query("delete from user where id=3"); if($res){ echo '成功删除数据【'.$res->rowCount().'】条<br/>'; } # 【示例5:查询数据】: $res = $pdo->query("select id,name from user"); $data = []; # 1:FETCH_ASSOC 关联数组形式返回 # 2:FETCH_NUM 数字索引数组形式返回 # 设置返回数据类型方法1: $res->setFetchMode(\PDO::FETCH_NUM); while($row = $res->fetch()){ $data[] = $row; } echo '<pre>'; print_r($data); echo '</pre>'; # 设置返回数据类型方法2: while($row = $res->fetch(\PDO::FETCH_ASSOC)){ $data[] = $row; } echo '<pre>'; print_r($data); echo '</pre>'; # 【示例6:统计数据】:统计company表有多少条数据 $num = $pdo->query("select count(*) from user"); echo '共有数据:【'.$num->fetchColumn().'】条'; # 【示例7:防sql注入】:实例,使用前先看文字说明,会理解的更透彻! # PDO连接mysql数据库(数据库名:lmgg ,账户:root,密码:root) $pdo = new \PDO('sqlite:'.dirname(__FILE__).'appAll.db'); # 禁用prepared statements的仿真效果 $pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false); $pdo->query("set names 'utf8'"); $sql="select * from user where name = ?"; $res = $pdo->prepare($sql); $name = '小川编程添加111'; $exeres = $res->execute(array($name)); $data = []; if($exeres){ while ($row = $res->fetch(\PDO::FETCH_ASSOC)){ $data[] = $row; } } echo '<pre>'; print_r($data); echo '</pre>'; # 关闭数据库链接 $pdo = null; ?>
转载请注明来源地址:小川编程 » https://www.youhutong.com/index.php/article/index/144.html