之前从网上看可以通过直接的方法对sqlite数据库进行操作。但好像只是支持sqlite2.对sqlite3不支持。于是又看了看原来要使用PDO进行连接。 讲自己写的一个封装的代码放出来。 需要注意的就是ROOT是项目的绝对路径。$module之类的参数根据实际情况需要。 DT_URL是失败后的一个跳转url。 因为sqlite在连接失败后发现自动创建一个空文件。所以在connect_sqlite方法中直接判断若此文件不存在则不进行库连接操作。 ====================================================================================== <?php /** * 此类只兼容sqlite3 * @author hanxiaoyue */ class db_sqlite { //打开sqlite数据库 function connect_sqlite($dbname,$module) { $conn = null; if(file_exists(ROOT.'/db/'.$module.'/'.$dbname)) { $dbPath = 'sqlite:'.ROOT.'/db/'.$module.'/'.$dbname; try { $conn = new PDO($dbPath); $conn->beginTransaction(); } catch(PDOException $e) { echo 'Exception is:'.$e->getMessage(); } return $conn; } else { exit(header('location:'.DT_URL)); } } //打开datafarm链接 function connect_datafarm_sqlite($dbname) { $conn = null; if(file_exists(ROOT.'/data/datafarm/'.$dbname)) { $dbPath = 'sqlite:'.ROOT.'/data/datafarm/'.$dbname; try { $conn = new PDO($dbPath); $conn->beginTransaction(); } catch(PDOException $e) { echo 'Exception is:'.$e->getMessage(); } return $conn; } else { exit(header('location:'.DT_URL)); } } //查询操作 function query_sqlite($conn,$sql) { $result = array(); try { $sth = $conn->prepare($sql); $sth->execute(); //获取结果 $result = $sth->fetchAll(); } catch(PDOException $e) { echo 'Exception is:'.$e->getMessage(); } return $result; } //查询总记录数 function query_count($conn,$sql) { $result = 0; try { $sth = $conn->prepare($sql); $sth->execute(); //获取结果 $vec = $sth->fetchAll(); $result = $vec[0]['c']; } catch(PDOException $e) { echo 'Exception is:'.$e->getMessage(); } return $result; } //add,update,delete执行操作 function exec_sqlite($conn,$sql) { $count = 0; try { $count = $conn->exec($sql); } catch(PDOException $e) { $conn->rollBack(); echo 'Exception is:'.$e->getMessage(); } return $count; } /** * 提交事务。针对执行exec_sqlite后 */ function commit_sqlite($conn) { $conn->commit(); } //关闭连接 function close_sqlite($conn) { $conn=null; } } ?> |
|