`
yeyuan
  • 浏览: 231247 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

php操作mysql与sqlite类

阅读更多
来源:http://www.yytweb.com/?s=article-13.html
源博客上的类,有些小问题(表前缀只对mysql进行了处理,sqlite的没有处理),下面的这个是我做过一些处理之后的类,我也测试过了,可以使用。感兴趣的朋友也可以继续扩展下。

<?php
/**
 * 文件描述  PDO数据库操作类
 * =================================================================
 * 作    者  YYT<gyyst@126.com>
 * =================================================================
 */

class db
{
	private $config;

	private $db;

	public $querynum;

	public function mysql($host, $user, $password, $dbname, $tablepre = '', $charset = 'GBK')
	{
		$this->config['type'] = 'mysql';
		$this->config['tablepre'] = $tablepre;
		$this->config['mysql']['host'] = $host;
		$this->config['mysql']['user'] = $user;
		$this->config['mysql']['password'] = $password;
		$this->config['mysql']['dbname'] = $dbname;
		$this->config['mysql']['charset'] = $charset;
	}

	public function sqlite($datafile,$tablepre = '')
	{
		$this->config['type'] = 'sqlite';
		$this->config['sqlite']['file'] = $datafile;
                $this->config['tablepre'] = $tablepre;
	}

	private function connect()
	{
		if (isset($this->db)) {
			return true;
		}
		if ($this->config['type'] == 'mysql') {
			try{
				$this->db = new PDO('mysql:host='.$this->config['mysql']['host'].';dbname='.$this->config['mysql']['dbname'], $this->config['mysql']['user'], $this->config['mysql']['password'], array(PDO::ATTR_PERSISTENT => true));
				$this->db->query('SET NAMES '.$this->config['mysql']['charset']);
			} catch (PDOException $e) {
				exit('数据库连接失败:'.$e->getMessage());
			}
		}
		if ($this->config['type'] == 'sqlite') {
			!file_exists($this->config['sqlite']['file']) && exit('没有找到SQLITE数据库');
			$this->db = new PDO('sqlite:'.$this->config['sqlite']['file']);
		}
		!isset($this->db) && exit('不支持该数据库类型 '.$this->config['type']);
	}

	public function table($table)
	{
		return '`'.$this->config['tablepre'].$table.'`';		
	}

	public function strescape($str)
	{
		if ($this->config['type'] === 'mysql') {
			return !get_magic_quotes_gpc() ? addslashes($str) : $str;
		}
		if ($this->config['type'] === 'sqlite') {
			return str_replace('\'', '\'\'', $str);
		}
		return $str;
	}

	public function format_condition($condition)
	{
		if (is_array($condition)) {
			foreach ($condition as $key => $value) {
				$join[] = $key.' = \''.$this->strescape($value).'\'';
			}
			return ' WHERE '.join(' AND ', $join);
		}
		return $condition ? ' WHERE '.$condition : '';
	}

	private function error()
	{
		if ($this->db->errorCode() != '00000') {
			$error = $this->db->errorInfo();
			exit('SQL语句错误:'.$error['2']);
		}
	}

	public function query($sql)
	{
		$this->connect();
		$result = $this->db->query($sql);
		$this->error();
		$result->setFetchMode(PDO::FETCH_ASSOC);
		$this->querynum++;
		return $result;
	}

	public function exec($sql)
	{
		$this->connect();
		$result = $this->db->exec($sql);
		$this->error();
		$this->querynum++;
		return $result;
	}

	public function lastinsertid()
	{
		return $this->db->lastInsertId();
	}

	public function fetchall($table, $field, $condition = '', $sort = '', $limit = '')
	{
		$condition = $this->format_condition($condition);
		$sort && $sort = ' ORDER BY '.$sort;
		$limit && $limit = ' LIMIT '.$limit;
		$sql = 'SELECT '.$field.' FROM '.$this->table($table).$condition.$sort.$limit;
		return $this->query($sql)->fetchall();
	}

	public function fetch($table, $field, $condition = '', $sort = '')
	{
		$condition = $this->format_condition($condition);
		$sort && $sort = ' ORDER BY '.$sort;
		$sql = 'SELECT '.$field.' FROM '.$this->table($table).$condition.$sort.' LIMIT 1';
		return $this->query($sql)->fetch();
	}

	public function rowcount($table, $condition = '')
	{
		$condition = $this->format_condition($condition);
		$sql = 'SELECT COUNT(*) FROM '.$this->table($table).$condition;
		$result = $this->query($sql)->fetch();
		return $result['COUNT(*)'];
	}

	public function get_fields($table)
	{
		if ($this->config['type'] == 'mysql') {
			$sql = 'DESCRIBE '.$this->table($table);
			$key = 'Field';
		} else if ($this->config['type'] == 'sqlite') {
			$sql = 'PRAGMA table_info('.$this->table($table).')';
			$key = 'name';
		}
		$fields = $this->query($sql)->fetchall();
		foreach ($fields as $value) {
			$result[] = $value[$key];
		}
		return $result;
	}

	public function insert($table, $array)
	{
		if (!is_array($array)) {
			return false;
		}
		foreach ($array as $key => $value) {
			$cols[] = $key;
			$vals[] = '\''.$this->strescape($value).'\'';
		}
		$col = join(',', $cols);
		$val = join(',', $vals);
		$sql = 'INSERT INTO '.$this->table($table).' ('.$col.') VALUES ('.$val.')';
		return $this->exec($sql);
	}

	public function update($table, $array, $condition)
	{
		if (!is_array($array)) {
			return false;
		}
		$condition = $this->format_condition($condition);
		foreach ($array as $key => $value) {
			$vals[] = $key.' = \''.$this->strescape($value).'\'';
		}
		$values = join(',', $vals);
		$sql = 'UPDATE '.$this->table($table).' SET '.$values.$condition;
		return $this->exec($sql);
	}

	public function delete($table, $condition)
	{
		$condition = $this->format_condition($condition);
		$sql = 'DELETE FROM '.$this->table($table).$condition;
		return $this->exec($sql);
	}
}

//例子
$db = new db();
//配置数据库,2选一
//$db->mysql($host, $user, $password, $dbname, '表前缀', 'GBK');
$db->sqlite('d:\Backup\test2.db');

//SQL语句查询
$db->query('SELECT * FROM 表')->fetch();//或者fetchall();

//执行一条无返回结果的SQL语句,如插入数据
$db->exec($sql);

//返回最后插入的数据主键
echo $db->lastinsertid();

/***** 下面的操作如果条件为数组则不需要字符转义 *****/

//查询一条数据
$db->fetch('表', '字段1,字段2', '条件,可用数组,如:array(id => 1)', 'id DESC');

//查询所有数据
$db->fetchall('表', '字段1,字段2', '条件,可用数组', 'id DESC', '显示条数');

//插入一条数据
$db->insert('test', array('username' => 'lxx', 'password' => 'lxx'));

//更新一条数据
$db->update('表', array('字段' => '值', '字段2' => '值'), array('id' => '1 更新ID为1的数据'));

//删除一条数据
$db->delete('test', array('username' => 'lxx'));

  • db.rar (2 KB)
  • 下载次数: 20
分享到:
评论

相关推荐

    Ubuntu安装mysql和sqlite3

    ### Ubuntu安装MySQL与SQLite3详解 #### 一、在Ubuntu中彻底卸载MySQL 在进行新的MySQL或SQLite3安装之前,确保系统上没有遗留的MySQL安装是非常重要的。下面是如何在Ubuntu系统中彻底卸载MySQL: 1. **删除MySQL...

    Android 注册登入 (PHP, MySQL 和 SQLite)

    总结,实现Android注册登录功能,需要结合PHP、MySQL和SQLite的技术,涉及前端UI设计、HTTP通信、数据库操作以及安全性等多个方面。这个项目可以帮助开发者深入理解移动应用与服务器端的协作,并提升对数据管理和...

    Adminers MYSQL/SQLite管理工具.rar

    Adminers是一款PHP/Mysql/SQLite可视化管理程序,功能类似于phpMyAdmin,不过要比phpMyAdmin更简洁,而且安装配置超简单,因为Adminers仅仅只有一个PHP文件,但它可支持11种界面语言,只要是PHP4.3 ,MySQL 4.1 以上...

    mysql2sqlite:使用 php、pdo 或 exe 将 mysql 数据库转换为 sqlite 数据库-开源

    将 mysql 数据库转换为 Sqlite 数据库。 包括两个项目:A) 一个 php 脚本 B) 一个基于 python 脚本的 Windows 可执行文件 转换数据、索引和外键约束。 关于 php 脚本:-不需要很多内存-良好的速度 预计在 VDS/VPS 上...

    php操作数据库类库,包括MySQL、MSSQL、Oracle、SQLite

    在PHP编程中,数据库操作是不可...总之,这个压缩包中的`Database`类库为PHP开发者提供了一个便利的工具,帮助他们高效地与MySQL、MSSQL、Oracle和SQLite数据库进行交互,简化了数据库操作的代码编写,提高了开发效率。

    iOS数据库操作,SQLite操作和MySQL操作的实例.zip

    在iOS应用中,通常不直接与MySQL交互,而是通过后端服务(如PHP或Node.js)作为中间层,处理应用的数据库请求。这种模式下,应用发送HTTP请求,后端服务接收请求、执行相应的SQL操作,然后将结果返回给应用。 在...

    数据库操作类:一个数据库管理工具类库,单文件,非常好用支持mysql,sqlite.zip

    同样,对于SQLite数据库,Adminer也提供了相似的功能,尽管在某些高级特性上可能略有不同,因为SQLite的特性和功能与MySQL有所区别。 使用Adminer,用户可以直接通过Web界面进行数据库操作,这对于开发者来说非常...

    php-sqlite数据库连接类.zip

    sqlite 数据库连接类就是利用了php 与sqlite进行连接操作;数据库连接,返回数据库连接标识符;是否保持持续连接,1为持续连接,0为非持续连接;从结果集中取得一行作为关联数组;显示mysql教程错误信息。

    美优相册管理系统1.1 php+mysql/sqlite

    * 全面支持Sqlite和Mysql两种数据库引擎 * 支持超大图片上传 * 相册可以设置公开或个人,个人相册登录后才可以看到 * 自动生成各种尺寸图片 * 图片批量管理 * 简单防盗链功能 * 可查看图片EXIF信息 * 图片...

    Wordpress改SqLite数据库操作

    3. **使用适配器类**: `dbpdo.class.php`和`file.class.php`可能包含了处理SQLite数据库的自定义PDO类,这些类可以帮助WordPress正确地与SQLite交互。 4. **修改WordPress核心代码**: WordPress默认不支持SQLite,...

    MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB 和/或 MongoDB

    MariaDB是MySQL的一个分支,由MySQL创始人开发,旨在保持与MySQL的兼容性同时提供额外的功能和改进。MariaDB以更快的速度和更开放的社区支持为特点,支持Galera集群以实现高可用性。 7. MongoDB: MongoDB是一款...

    留言墙留言板php源码access,mysql,sqlite和不用连接数据库的text,txt

    【标题】"留言墙留言板php源码access,mysql,sqlite和不用连接数据库的text,txt"涉及的关键知识点包括PHP编程语言、数据库管理和多种数据存储方式。在这个项目中,开发者提供了几种不同的留言板实现方式,以便适应...

    linux下 连接sqlite数据库以及mysql的使用方法

    ### 连接与操作 1. **SQLite连接**:在Python中,可以使用`sqlite3.connect('&lt;database_name&gt;.db')`建立连接,然后通过`cursor.execute(sql)`执行SQL。 2. **MySQL连接**:对于Python,`pymysql.connect(host='...

    PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】

    本篇文章中,将通过一个操作类的介绍来探索如何利用PHP的PDO扩展来实现对SQLite数据库的增删改查以及事务处理等操作。 首先,PDO是PHP的一个数据库访问抽象层,它支持一系列的数据库,包括SQLite、MySQL、Oracle等...

    readerself, 自承载rss阅读器( php/mysql或者 SQLite ) 阅读器替代.zip

    readerself, 自承载rss阅读器( php/mysql或者 SQLite ) 阅读器替代 需求语言PHP 5.3或者更高版本数据库MySQL 5.1或者更高版本SQLite Web服务器在支持 virtualhost/目录配置的virtualhost/目录配置中启用了Apache或者...

    vc++ 下SQLite开发用的库,头文件,DLL,管理工具,c++类

    它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比...

    嵌入式服务器支持php和sqlite

    OptWare是一个轻量级的包管理系统,包含了许多应用程序,如MySQL、Transmission、Asterisk、OpenSSH、Apache、nginx、PHP和Vlc等。可以使用wget命令下载并安装OptWare包管理系统。 在安装OptWare包管理系统后,可以...

    php连接sqlite

    这就是使用PHP连接SQLite数据库的基本步骤和常用操作。SQLite数据库文件(如`test.db`)可以在服务器上任意位置,只要在连接时提供正确的路径即可。这种方式特别适合于小型应用或者开发环境,因为它简单易用且不需要...

    PHP实现的简单操作SQLite数据库类与用法示例

    实例中首先创建了一个名为cls_sqlite.php的SQLite操作类文件。然后,在主脚本中引入了这个类文件,并创建了一个SQLite对象实例$DB,传入了数据库文件名'blog.db'。 接着,通过$DB对象创建了一个名为test的数据库表...

Global site tag (gtag.js) - Google Analytics