Heim Backend-Entwicklung PHP-Tutorial 全新的PDO数据库操作类php版(仅适用Mysql)_PHP

全新的PDO数据库操作类php版(仅适用Mysql)_PHP

Jun 01, 2016 pm 12:11 PM
pdo

复制代码 代码如下:
/**
* 作者:胡睿
* 日期: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();

作者:胡尐睿丶
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Lösung für PHP Schwerwiegender Fehler: Aufruf der undefinierten Methode PDO::prepare() in Lösung für PHP Schwerwiegender Fehler: Aufruf der undefinierten Methode PDO::prepare() in Jun 22, 2023 pm 06:40 PM

PHP ist eine beliebte Webentwicklungssprache, die schon seit langem verwendet wird. Die in PHP integrierte PDO-Klasse (PHP Data Object) ist für uns eine gängige Möglichkeit, bei der Entwicklung von Webanwendungen mit der Datenbank zu interagieren. Ein Problem, auf das einige PHP-Entwickler jedoch häufig stoßen, besteht darin, dass sie bei Verwendung der PDO-Klasse zur Interaktion mit der Datenbank eine Fehlermeldung wie diese erhalten: PHPFatalerror:CalltoundefinedmethodPDO::prep

Wie verwende ich die PDO_PGSQL-Erweiterung von PHP? Wie verwende ich die PDO_PGSQL-Erweiterung von PHP? Jun 02, 2023 pm 06:10 PM

Als beliebte Programmiersprache wird PHP häufig im Bereich der Webentwicklung eingesetzt. Unter diesen ist die PDO_PGSQL-Erweiterung von PHP eine häufig verwendete PHP-Erweiterung. Sie bietet eine interaktive Schnittstelle mit der PostgreSQL-Datenbank und kann die Datenübertragung und Interaktion zwischen PHP und PostgreSQL realisieren. In diesem Artikel wird detailliert beschrieben, wie Sie die PDO_PGSQL-Erweiterung von PHP verwenden. 1. Was ist die PDO_PGSQL-Erweiterung? PDO_PGSQL ist eine Erweiterungsbibliothek von PHP, die

PHP und PDO: So führen Sie Masseneinfügungen und -aktualisierungen durch PHP und PDO: So führen Sie Masseneinfügungen und -aktualisierungen durch Jul 28, 2023 pm 07:41 PM

PHP und PDO: So führen Sie Stapeleinfügungen und -aktualisierungen durch. Einführung: Wenn Sie PHP zum Schreiben datenbankbezogener Anwendungen verwenden, stoßen Sie häufig auf Situationen, in denen Sie Daten stapelweise einfügen und aktualisieren müssen. Der traditionelle Ansatz besteht darin, Schleifen zur Ausführung mehrerer Datenbankoperationen zu verwenden, diese Methode ist jedoch ineffizient. Das PDO (PHPDataObject) von PHP bietet eine effizientere Möglichkeit, Batch-Einfüge- und Aktualisierungsvorgänge durchzuführen. In diesem Artikel wird erläutert, wie Sie PDO zum Implementieren von Batch-Einfüge- und Aktualisierungsvorgängen verwenden. 1. Einführung in PDO: PDO ist PH

PHP und PDO: Umgang mit JSON-Daten in einer Datenbank PHP und PDO: Umgang mit JSON-Daten in einer Datenbank Jul 29, 2023 pm 05:17 PM

PHP und PDO: Umgang mit JSON-Daten in Datenbanken In der modernen Webentwicklung ist die Verarbeitung und Speicherung großer Datenmengen eine sehr wichtige Aufgabe. Mit der Popularität mobiler Anwendungen und Cloud Computing werden immer mehr Daten in Datenbanken im JSON-Format (JavaScript Object Notation) gespeichert. Als häufig verwendete serverseitige Sprache bietet die PDO-Erweiterung (PHPDataObject) von PHP eine bequeme Möglichkeit, Datenbanken zu verarbeiten und zu betreiben. Buch

PHP PDO vs. MySQL: Vergleich und Kontrast PHP PDO vs. MySQL: Vergleich und Kontrast Feb 19, 2024 pm 12:24 PM

PDOPDO ist eine objektorientierte Abstraktionsschicht für den Datenbankzugriff, die eine einheitliche Schnittstelle für PHP bereitstellt und es Ihnen ermöglicht, denselben Code für die Interaktion mit verschiedenen Datenbanken (z. B. Mysql, Postgresql, Oracle) zu verwenden. PDO verbirgt die Komplexität der zugrunde liegenden Datenbankverbindungen und vereinfacht Datenbankoperationen. Vorteile und Nachteile Vorteile: Einheitliche Schnittstelle, unterstützt mehrere Datenbanken, vereinfacht Datenbankoperationen, reduziert Entwicklungsschwierigkeiten, stellt vorbereitete Anweisungen bereit, verbessert die Sicherheit, unterstützt die Transaktionsverarbeitung. Nachteile: Die Leistung ist möglicherweise etwas geringer als bei nativen Erweiterungen, ist auf externe Bibliotheken angewiesen, kann den Overhead erhöhen. Democode verwendet PDO Connect zur MySQL-Datenbank: $db=newPDO("mysql:host=localhost;dbnam

PHP und PDO: So führen Sie Paging-Abfragen durch und zeigen Daten an PHP und PDO: So führen Sie Paging-Abfragen durch und zeigen Daten an Jul 29, 2023 pm 04:10 PM

PHP und PDO: Abfragen und Anzeigen von Daten auf Seiten Bei der Entwicklung von Webanwendungen ist das Abfragen und Anzeigen von Daten auf Seiten eine sehr häufige Anforderung. Durch Paging können wir eine bestimmte Datenmenge gleichzeitig anzeigen und so die Seitenladegeschwindigkeit und das Benutzererlebnis verbessern. In PHP können die Funktionen der Paging-Abfrage und der Anzeige von Daten einfach mithilfe der PHP Data Object (PDO)-Bibliothek realisiert werden. In diesem Artikel wird erläutert, wie Sie PDO in PHP verwenden, um Daten seitenweise abzufragen und anzuzeigen, und entsprechende Codebeispiele bereitstellen. 1. Erstellen Sie Datenbank- und Datentabellen

So stellen Sie mithilfe von PDO eine Verbindung zur Redis-Datenbank her So stellen Sie mithilfe von PDO eine Verbindung zur Redis-Datenbank her Jul 28, 2023 pm 04:29 PM

So verwenden Sie PDO zum Herstellen einer Verbindung zur Redis-Datenbank. Redis ist eine Open-Source-In-Memory-Speicher-Schlüsselwertdatenbank, die häufig in Cache-, Warteschlangen- und anderen Szenarien verwendet wird. In der PHP-Entwicklung kann der Einsatz von Redis die Leistung und Stabilität von Anwendungen effektiv verbessern. Durch die PDO-Erweiterung (PHPDataObjects) können wir die Redis-Datenbank bequemer verbinden und betreiben. In diesem Artikel wird anhand von Codebeispielen erläutert, wie Sie mit PDO eine Verbindung zu einer Redis-Datenbank herstellen. Installieren Sie zu Beginn die Redis-Erweiterung

PHP und PDO: So führen Sie Datenbanksicherungs- und -wiederherstellungsvorgänge durch PHP und PDO: So führen Sie Datenbanksicherungs- und -wiederherstellungsvorgänge durch Jul 29, 2023 pm 06:54 PM

PHP und PDO: So führen Sie Datenbanksicherungs- und -wiederherstellungsvorgänge durch. Bei der Entwicklung von Webanwendungen sind Datenbanksicherung und -wiederherstellung sehr wichtige Aufgaben. Als beliebte serverseitige Skriptsprache bietet PHP eine Fülle von Bibliotheken und Erweiterungen, darunter PDO (PHP Data Objects), eine leistungsstarke Abstraktionsschicht für den Datenbankzugriff. In diesem Artikel wird erläutert, wie Sie mit PHP und PDO Datenbanksicherungs- und -wiederherstellungsvorgänge durchführen. Schritt 1: Verbindung zur Datenbank herstellen Vor dem eigentlichen Betrieb müssen wir eine Verbindung zur Datenbank herstellen. PDO-Paar verwenden

See all articles