全新的PDO数据库操作类php版(仅适用Mysql)_PHP
/**
* 作者:胡睿
* 日期:2012/07/21
* 电邮:hooray0905@foxmail.com
*/
class HRDB{
protected $pdo;
protected $res;
protected $config;
/*构造函数*/
function __construct($config){
$this->Config = $config;
$this->connect();
}
/*数据库连接*/
public function connect(){
$this->pdo = new PDO($this->Config['dsn'], $this->Config['name'], $this->Config['password']);
$this->pdo->query('set names utf8;');
//把结果序列化成stdClass
//$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
//自己写代码捕获Exception
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
/*数据库关闭*/
public function close(){
$this->pdo = null;
}
public function query($sql){
$res = $this->pdo->query($sql);
if($res){
$this->res = $res;
}
}
public function exec($sql){
$res = $this->pdo->exec($sql);
if($res){
$this->res = $res;
}
}
public function fetchAll(){
return $this->res->fetchAll();
}
public function fetch(){
return $this->res->fetch();
}
public function fetchColumn(){
return $this->res->fetchColumn();
}
public function lastInsertId(){
return $this->res->lastInsertId();
}
/**
* 参数说明
* int $debug 是否开启调试,开启则输出sql语句
* 0 不开启
* 1 开启
* 2 开启并终止程序
* int $mode 返回类型
* 0 返回多条记录
* 1 返回单条记录
* 2 返回行数
* string/array $table 数据库表,两种传值模式
* 普通模式:
* 'tb_member, tb_money'
* 数组模式:
* array('tb_member', 'tb_money')
* string/array $fields 需要查询的数据库字段,允许为空,默认为查找全部,两种传值模式
* 普通模式:
* 'username, password'
* 数组模式:
* array('username', 'password')
* string/array $sqlwhere 查询条件,允许为空,两种传值模式
* 普通模式:
* 'and type = 1 and username like "%os%"'
* 数组模式:
* array('type = 1', 'username like "%os%"')
* string $orderby 排序,默认为id倒序
*/
public function select($debug, $mode, $table, $fields="*", $sqlwhere="", $orderby="tbid desc"){
//参数处理
if(is_array($table)){
$table = implode(', ', $table);
}
if(is_array($fields)){
$fields = implode(', ', $fields);
}
if(is_array($sqlwhere)){
$sqlwhere = ' and '.implode(' and ', $sqlwhere);
}
//数据库操作
if($debug === 0){
if($mode === 2){
$this->query("select count(tbid) from $table where 1=1 $sqlwhere");
$return = $this->fetchColumn();
}else if($mode === 1){
$this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
$return = $this->fetch();
}else{
$this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
$return = $this->fetchAll();
}
return $return;
}else{
if($mode === 2){
echo "select count(tbid) from $table where 1=1 $sqlwhere";
}else if($mode === 1){
echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";
}
else{
echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";
}
if($debug === 2){
exit;
}
}
}
/**
* 参数说明
* int $debug 是否开启调试,开启则输出sql语句
* 0 不开启
* 1 开启
* 2 开启并终止程序
* int $mode 返回类型
* 0 无返回信息
* 1 返回执行条目数
* 2 返回最后一次插入记录的id
* string/array $table 数据库表,两种传值模式
* 普通模式:
* 'tb_member, tb_money'
* 数组模式:
* array('tb_member', 'tb_money')
* string/array $set 需要插入的字段及内容,两种传值模式
* 普通模式:
* 'username = "test", type = 1, dt = now()'
* 数组模式:
* array('username = "test"', 'type = 1', 'dt = now()')
*/
public function insert($debug, $mode, $table, $set){
//参数处理
if(is_array($table)){
$table = implode(', ', $table);
}
if(is_array($set)){
$set = implode(', ', $set);
}
//数据库操作
if($debug === 0){
if($mode === 2){
$this->query("insert into $table set $set");
$return = $this->lastInsertId();
}else if($mode === 1){
$this->exec("insert into $table set $set");
$return = $this->res;
}else{
$this->query("insert into $table set $set");
$return = NULL;
}
return $return;
}else{
echo "insert into $table set $set";
if($debug === 2){
exit;
}
}
}
/**
* 参数说明
* int $debug 是否开启调试,开启则输出sql语句
* 0 不开启
* 1 开启
* 2 开启并终止程序
* int $mode 返回类型
* 0 无返回信息
* 1 返回执行条目数
* string $table 数据库表,两种传值模式
* 普通模式:
* 'tb_member, tb_money'
* 数组模式:
* array('tb_member', 'tb_money')
* string/array $set 需要更新的字段及内容,两种传值模式
* 普通模式:
* 'username = "test", type = 1, dt = now()'
* 数组模式:
* array('username = "test"', 'type = 1', 'dt = now()')
* string/array $sqlwhere 修改条件,允许为空,两种传值模式
* 普通模式:
* 'and type = 1 and username like "%os%"'
* 数组模式:
* array('type = 1', 'username like "%os%"')
*/
public function update($debug, $mode, $table, $set, $sqlwhere=""){
//参数处理
if(is_array($table)){
$table = implode(', ', $table);
}
if(is_array($set)){
$set = implode(', ', $set);
}
if(is_array($sqlwhere)){
$sqlwhere = ' and '.implode(' and ', $sqlwhere);
}
//数据库操作
if($debug === 0){
if($mode === 1){
$this->exec("update $table set $set where 1=1 $sqlwhere");
$return = $this->res;
}else{
$this->query("update $table set $set where 1=1 $sqlwhere");
$return = NULL;
}
return $return;
}else{
echo "update $table set $set where 1=1 $sqlwhere";
if($debug === 2){
exit;
}
}
}
/**
* 参数说明
* int $debug 是否开启调试,开启则输出sql语句
* 0 不开启
* 1 开启
* 2 开启并终止程序
* int $mode 返回类型
* 0 无返回信息
* 1 返回执行条目数
* string $table 数据库表
* string/array $sqlwhere 删除条件,允许为空,两种传值模式
* 普通模式:
* 'and type = 1 and username like "%os%"'
* 数组模式:
* array('type = 1', 'username like "%os%"')
*/
public function delete($debug, $mode, $table, $sqlwhere=""){
//参数处理
if(is_array($sqlwhere)){
$sqlwhere = ' and '.implode(' and ', $sqlwhere);
}
//数据库操作
if($debug === 0){
if($mode === 1){
$this->exec("delete from $table where 1=1 $sqlwhere");
$return = $this->res;
}else{
$this->query("delete from $table where 1=1 $sqlwhere");
$return = NULL;
}
return $return;
}else{
echo "delete from $table where 1=1 $sqlwhere";
if($debug === 2){
exit;
}
}
}
}
其实使用上,和之前的相差不大,目的就是为了方便移植。
本次重写着重处理了几个问题:
① insert语句太复杂,fields与values对应容易出现误差
我们看下最常见的一句sql插入语句
复制代码 代码如下:insert into tb_member (username, type, dt) values ('test', 1, now())
在传统模式下,fields和values参数是分开传入的,但却要保证两者参数传入的顺序一致。这很容易导致顺序错乱或者漏传某个参数。
这次已经把问题修改了,采用了mysql独有的insert语法,同样是上面那功能,就可以换成这样的写法
复制代码 代码如下:insert into tb_member set username = "test", type = 1, lastlogindt = now()
就像update一样,一目了然。
② 部分参数可以用数组代替
比如这样一句sql
复制代码 代码如下:delete from tb_member where 1=1 and tbid = 1 and username = "hooray"
在原先调用方法的时候,需要手动拼装好where条件,这样操作的成本很高,现在完全可以用这种形式
复制代码 代码如下:
$where = array(
'tbid = 1',
'username = "hooray"'
);
$db->delete(1, 0, 'tb_member', $where);
条件再多也不会打乱你的思路。同样,不仅仅是where参数,update里的set也可以以这种形式(具体可参见完整源码)
复制代码 代码如下:
$set = array('username = "123"', 'type = 1', 'lastlogindt = now()');
$where = array('tbid = 1');
$db->update(1, 0, 'tb_member', $set, $where);
③ 可自定义sql语句
有时候,sql过于复杂,导致无法使用类里提供的方法去组装sql语句,这时候就需要一个功能,就是能直接传入我已经组装好的sql语句执行,并返回信息。现在,这功能也有了
复制代码 代码如下:
$db->query('select username, password from tb_member');
$rs = $db->fetchAll();
是不是很像pdo原生态的写法?
④ 支持创建多数据库连接
原先的因为只是数据库操作方法,所以并不支持多数据库连接,在实现上需要复制出2个相同的文件,修改部分变量,操作实属复杂。现在这问题也解决了。
复制代码 代码如下:
$db_hoorayos_config = array(
'dsn'=>'mysql:host=localhost;dbname=hoorayos',
'name'=>'root',
'password'=>'hooray'
);
$db = new HRDB($db_hoorayos_config);
$db_hoorayos_config2 = array(
'dsn'=>'mysql:host=localhost;dbname=hoorayos2',
'name'=>'root',
'password'=>'hooray'
);
$db2 = new HRDB($db_hoorayos_config2);
这样就能同时创建2个数据库连接,方便处理数据库与数据库交互的情况。
大致新功能就是这么多了,整个代码并不多,欢迎阅读了解。下面是我在编写时写的测试代码,也一并提供上来,方便大家学习。
复制代码 代码如下:
require_once('global.php');
require_once('inc/setting.inc.php');
$db = new HRDB($db_hoorayos_config);
echo '
select测试
';
echo '普通模式,直接字符串传入
';
$rs = $db->select(1, 0, 'tb_member', 'username, password', 'and type = 1 and username like "%os%"');
echo '
数组模式,可传入数组
';
$fields = array('username', 'password');
$where = array('type = 1', 'username like "%os%"');
$rs = $db->select(1, 0, 'tb_member', $fields, $where);
echo '
insert测试
';
echo '普通模式,直接字符串传入
';
$db->insert(1, 0, 'tb_member', 'username = "test", type = 1, lastlogindt = now()');
echo '
数组模式,可传入数组
';
$set = array('username = "test"', 'type = 1', 'lastlogindt = now()');
$db->insert(1, 0, 'tb_member', $set);
echo '
update测试
';
echo '普通模式,直接字符串传入
';
$db->update(1, 0, 'tb_member', 'username = "123", type = 1, lastlogindt = now()', 'and tbid = 7');
echo '
数组模式,可传入数组
';
$set = array('username = "123"', 'type = 1', 'lastlogindt = now()');
$where = array('tbid = 1');
$db->update(1, 0, 'tb_member', $set, $where);
echo '
delete测试
';
echo '普通模式,直接字符串传入
';
$db->delete(1, 0, 'tb_member', 'and tbid = 1 and username = "hooray"');
echo '
数组模式,可传入数组
';
$where = array(
'tbid = 1',
'username = "hooray"'
);
$db->delete(1, 0, 'tb_member', $where);
echo '
自定义sql
';
$db->query('select username, password from tb_member');
$rs = $db->fetchAll();
var_dump($rs);
$db->close();
作者:胡尐睿丶

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

PHP est un langage de développement Web populaire utilisé depuis longtemps. La classe PDO (PHP Data Object) intégrée à PHP est un moyen courant pour nous d'interagir avec la base de données lors du développement d'applications Web. Cependant, un problème que certains développeurs PHP rencontrent souvent est que lorsqu'ils utilisent la classe PDO pour interagir avec la base de données, ils reçoivent une erreur comme celle-ci : PHPFatalerror:CalltoundefinedmethodPDO::prep

En tant que langage de programmation populaire, PHP est largement utilisé dans le domaine du développement Web. Parmi eux, l'extension PDO_PGSQL de PHP est une extension PHP couramment utilisée. Elle fournit une interface interactive avec la base de données PostgreSQL et peut réaliser la transmission de données et l'interaction entre PHP et PostgreSQL. Cet article présentera en détail comment utiliser l'extension PDO_PGSQL de PHP. 1. Qu'est-ce que l'extension PDO_PGSQL ? PDO_PGSQL est une bibliothèque d'extensions de PHP, qui

PHP et PDO : Comment effectuer des insertions et des mises à jour par lots Introduction : Lorsque vous utilisez PHP pour écrire des applications liées à une base de données, vous rencontrez souvent des situations dans lesquelles vous devez insérer et mettre à jour des données par lots. L'approche traditionnelle consiste à utiliser des boucles pour effectuer plusieurs opérations sur la base de données, mais cette méthode est inefficace. Le PDO de PHP (PHPDataObject) fournit un moyen plus efficace d'effectuer des opérations d'insertion et de mise à jour par lots. Cet article explique comment utiliser PDO pour implémenter des opérations d'insertion et de mise à jour par lots. 1. Introduction au PDO : PDO est PH

PHP et PDO : Comment gérer les données JSON dans les bases de données Dans le développement Web moderne, le traitement et le stockage de grandes quantités de données sont une tâche très importante. Avec la popularité des applications mobiles et du cloud computing, de plus en plus de données sont stockées dans des bases de données au format JSON (JavaScript Object Notation). En tant que langage côté serveur couramment utilisé, l'extension PDO (PHPDataObject) de PHP offre un moyen pratique de traiter et d'exploiter des bases de données. Livre

PHP et PDO : Comment interroger et afficher des données dans des pages Lors du développement d'applications Web, l'interrogation et l'affichage de données dans des pages sont une exigence très courante. Grâce à la pagination, nous pouvons afficher une certaine quantité de données à la fois, améliorant ainsi la vitesse de chargement des pages et l'expérience utilisateur. En PHP, les fonctions de requête de pagination et d'affichage des données peuvent être facilement réalisées à l'aide de la bibliothèque PHP Data Object (PDO). Cet article expliquera comment utiliser PDO en PHP pour interroger et afficher des données par page, et fournira des exemples de code correspondants. 1. Créer une base de données et des tables de données

PDOPDO est une couche d'abstraction d'accès aux bases de données orientée objet qui fournit une interface unifiée pour PHP, vous permettant d'utiliser le même code pour interagir avec différentes bases de données (telles que Mysql, postgresql, oracle). PDO masque la complexité des connexions à la base de données sous-jacente et simplifie les opérations de la base de données. Avantages et inconvénients Avantages : Interface unifiée, prend en charge plusieurs bases de données, simplifie les opérations de base de données, réduit les difficultés de développement, fournit des instructions préparées, améliore la sécurité, prend en charge le traitement des transactions. Inconvénients : les performances peuvent être légèrement inférieures à celles des extensions natives, reposent sur des bibliothèques externes, peuvent augmenter la surcharge. le code de démonstration utilise PDO Connectez-vous à la base de données MySQL : $db=newPDO("mysql:host=localhost;dbnam

Comment utiliser PDO pour se connecter à la base de données Redis Redis est une base de données clé-valeur open source, hautes performances, de stockage en mémoire, couramment utilisée dans le cache, la file d'attente et d'autres scénarios. Dans le développement PHP, l'utilisation de Redis peut améliorer efficacement les performances et la stabilité des applications. Grâce à l'extension PDO (PHPDataObjects), nous pouvons connecter et exploiter la base de données Redis plus facilement. Cet article explique comment utiliser PDO pour se connecter à une base de données Redis, avec des exemples de code. Installez l'extension Redis au début

PHP et PDO : Comment effectuer des opérations de sauvegarde et de restauration de bases de données Lors du développement d'applications Web, la sauvegarde et la restauration de bases de données sont des tâches très importantes. En tant que langage de script côté serveur populaire, PHP fournit une multitude de bibliothèques et d'extensions, parmi lesquelles PDO (PHP Data Objects) est une puissante couche d'abstraction d'accès aux bases de données. Cet article explique comment utiliser PHP et PDO pour effectuer des opérations de sauvegarde et de restauration de bases de données. Étape 1 : Connexion à la base de données Avant l'opération proprement dite, nous devons établir une connexion à la base de données. Utiliser la paire PDO
