Heim  >  Artikel  >  php教程  >  Brandneue PHP-Version der PDO-Datenbankoperationsklasse

Brandneue PHP-Version der PDO-Datenbankoperationsklasse

高洛峰
高洛峰Original
2016-12-02 13:55:561111Durchsuche

Code kopieren Der Code lautet wie folgt:

class HRDB{
protected $pdo;
protected $config; */
function __construct($config){
$this->Config = $config
$this->connect();

/*Database Verbindung* /
öffentliche Funktion connect(){
$this->pdo = new PDO($this->Config['dsn'], $this->Config['name'], $ this- >Config['password']);
$this->pdo->query('set name utf8;');
//Serialisieren Sie das Ergebnis in stdClass
//$ this- >pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
//Schreiben Sie Ihren eigenen Code, um die Ausnahme abzufangen
$this->pdo->setAttribute(PDO:: ATTR_ERRMODE, PDO: :ERRMODE_EXCEPTION);
}

/*Datenbank schließen*/
öffentliche Funktion 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); ($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(); 🎜>/* *
* Parameterbeschreibung
* int $debug Ob das Debuggen aktiviert werden soll. Wenn aktiviert, wird die SQL-Anweisung ausgegeben
* 0 Deaktivieren
* 1 Aktivieren
* 2 Aktivieren und beenden Sie das Programm
* int $ mode return type
* 0 gibt mehrere Datensätze zurück
* 1 gibt einen einzelnen Datensatz zurück
* 2 gibt die Anzahl der Zeilen zurück
* String/Array $table Datenbanktabelle, zwei Werte- Übergabemodi
* normaler Modus:
* 'tb_member, tb_money'
* Array-Modus:
* array('tb_member', 'tb_money')
* string/array $fields Datenbankfelder abgefragt werden, darf leer sein, die Standardeinstellung ist die Suche nach allen, zwei Wertübergabemodi
* Normaler Modus:
* 'Benutzername, Passwort'
* Array-Modus:
* Array( 'Benutzername', 'Passwort')
* Zeichenfolge/Array $sqlwo Abfragebedingungen, leer erlaubt, zwei Wertübergabemodi
* Normaler Modus:
* 'und Typ = 1 und Benutzername wie „%os %"'
* Array-Modus:
* array('type = 1', 'username like "%os%"')
* string $orderby Sortierung, der Standardwert ist id in umgekehrter Reihenfolge
*/
public function select($debug, $mode, $table, $fields="*", $sqlwhere="", $orderby="tbid desc"){
//Parameterverarbeitung
if(is_array($table)){
$table = implode(', ', $table)
if(is_array($fields)){
$fields = implode(', ', $fields);
}
if(is_array($sqlwhere)){
$sqlwhere = ' and '.implode(' and ', $sqlwhere) ;
}
//Datenbankoperation
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(); $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"; $mode == = 1){
echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";
else{
echo "select $fields from $ Tabelle mit 1= 1 $sqlwhere order by $orderby";
}
if($debug === 2){
exit;
}
}
}

/ **
* Parameterbeschreibung
* int $debug Gibt an, ob das Debuggen aktiviert werden soll. Wenn aktiviert, wird die SQL-Anweisung ausgegeben
* 0 Deaktivieren
* 1 Aktivieren
* 2 Aktivieren und beenden Sie das Programm
* int $mode return type
* 0 keine Rückgabeinformationen
* 1 gibt die Anzahl der Ausführungseinträge zurück
* 2 gibt die ID des zuletzt eingefügten Datensatzes zurück
* String/Array $table Datenbanktabelle, zwei Arten der Wertübergabe Modus
* Normaler Modus:
* 'tb_member, tb_money'
* Array-Modus:
* array('tb_member', 'tb_money')
* string/array $set Felder und Inhalte, die eingefügt werden sollen, zwei Wertübergabemodi
* Normalmodus:
* 'username = "test", type = 1, dt = now()'
* Array-Modus:
* array('username = "test"', 'type = 1', 'dt = now()')
*/
public function insert($debug, $mode, $table, $set){
//Parameterverarbeitung
if(is_array( $table)){
$table = implode(', ', $table);
}
if(is_array($set)){
$set = implode(', ', $ set);
}
//Datenbankoperation
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;
echo "insert into $table set $set"; = 2){
exit;}
}
}

/**
* Parameterbeschreibung
* int $debug Ob das Debuggen aktiviert werden soll. Wenn aktiviert, wird die SQL-Anweisung ausgegeben
* 0 Deaktivieren
* 1 Aktivieren
* 2 Aktivieren und beenden Sie das Programm
* int $ mode return type
* 0 Keine Rückgabeinformationen
* 1 Gibt die Anzahl der Ausführungseinträge zurück
* string $table Datenbanktabelle, zwei Wertübergabemodi
* Normaler Modus:
* 'tb_member, tb_money '
* Array-Modus:
* array('tb_member', 'tb_money')
* string/array $set Felder und Inhalte, die aktualisiert werden müssen, zwei Wert- Übergabemodi
* Normalmodus:
* 'username = "test", type = 1, dt = now()'
* Array-Modus:
* array('username = "test"' , 'type = 1', 'dt = now()')
* string/array $sqlwhere Bedingungen ändern, leer zulassen, zwei Wertübergabemodi
* Normaler Modus:
* 'and type = 1 und Benutzername wie "%os%"'
* Array-Modus:
* array('type = 1', 'Benutzername wie "%os%"')
*/
public function update($debug, $mode, $table , $set, $sqlwhere=""){
//Parameterverarbeitung
if(is_array($table)){
$table = implode(', ', $table);
if(is_array($set)){
$set = implode(', ', $set);
}
if(is_array($sqlwhere)){
$sqlwhere = ' und '.implode(' and ', $sqlwhere);
}
//Datenbankoperation
if($debug === 0){
if($mode === 1) {
$this->exec("update $table set $set where 1=1 $sqlwhere"); this->query("update $table set $set where 1=1 $sqlwhere");
$return = NULL
}else{
echo "update $table set $set where 1=1 $sqlwhere";
if($debug === 2){
exit;
}

/**
* Parameterbeschreibung
* int $debug Ob das Debuggen aktiviert werden soll. Wenn aktiviert, wird die SQL-Anweisung ausgegeben
* 0 Deaktivieren
* 1 Aktivieren
* 2 Aktivieren und beenden Sie das Programm
* int $ mode return type
* 0 keine Rückgabeinformationen
* 1 gibt die Anzahl der Ausführungseinträge zurück
* string $table Datenbanktabelle
* string/array $sqlwhere Löschbedingung, zulässig leer sein, zwei Wertübergabemodi
* Normalmodus:
* 'und Typ = 1 und Benutzername wie "%os%"'
* Array-Modus:
* array('type = 1 ', 'Benutzername wie „%os %“‘)
*/
public function delete($debug, $mode, $table, $sqlwhere=""){
//Parameterverarbeitung
if(is_array($sqlwhere) ){
$sqlwhere = ' and '.implode(' and ', $sqlwhere);
}
//Datenbankoperation
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
}else; {
echo "delete from $table where 1=1 $sqlwhere";
if($debug === 2){
exit;}
}
}

Tatsächlich unterscheidet sich die Verwendung nicht wesentlich von der vorherigen. Der Zweck besteht darin, die Transplantation zu erleichtern.

Bei dieser Neufassung wurden mehrere Probleme behoben:

① Die Einfügeanweisung ist zu komplex und bei der Korrespondenz zwischen Feldern und Werten können Fehler auftreten.

Werfen wir einen Blick auf die meisten allgemeine SQL-Einfügeanweisung

Code kopieren Der Code lautet wie folgt: Werte ('test', 1, now()) in tb_member (Benutzername, Typ, dt) einfügen
Im traditionellen Modus die Die Parameter „Felder“ und „Werte“ werden separat übergeben, müssen jedoch sicherstellen, dass die Reihenfolge, in der die Parameter übergeben werden, konsistent ist. Dies kann leicht zu einer ungeordneten Reihenfolge oder fehlenden Parametern führen.

Diesmal wurde das Problem mithilfe der einzigartigen Einfüge-Syntax von MySQL geändert. Die gleiche Funktion wie oben kann auf diese Schreibweise geändert werden.

Code kopieren Der Code lautet wie folgt: Einfügen in tb_member set username = "test", type = 1, lastlogindt = now()
 Genau wie beim Update ist es auf einen Blick klar.

 ② Einige Parameter können durch Arrays ersetzt werden

Zum Beispiel diese SQL-Anweisung

Code kopieren Der Code lautet wie folgt: delete from tb_member where 1=1 and tbid = 1 und username = „hurra“
Als Sie die Methode ursprünglich aufgerufen haben, war dieser Vorgang sehr aufwendig. Jetzt können Sie den Code vollständig kopieren wie folgt:
$where = array(
'tbid = 1',
'username = "hurra"'
);
$db->delete(1, 0, ' tb_member', $where);

Egal wie viele Bedingungen es gibt, sie werden Ihren Gedankengang nicht stören. Ebenso kann nicht nur der Parameter where, sondern auch der Satz in der Aktualisierung in dieser Form vorliegen (Einzelheiten finden Sie im vollständigen Quellcode).

Kopieren Sie den Code. Der Code lautet wie folgt:
$set = array( 'username = "123" ', 'type = 1', 'lastlogindt = now()');
$where = array('tbid = 1'); 0, 'tb_member', $set, $where);

 ③ Anpassbare SQL-Anweisungen

Manchmal ist SQL zu komplex, sodass es unmöglich ist, die in der Klasse bereitgestellten Methoden zum Zusammenstellen von SQL zu verwenden Zu diesem Zeitpunkt besteht die Funktion darin, die von mir zusammengestellte SQL-Anweisung direkt zu übergeben, um Informationen auszuführen und zurückzugeben. Jetzt ist diese Funktion auch verfügbar

Code kopieren Der Code lautet wie folgt:
$db->query('select username, password from tb_member'); >fetchAll( );

Ist es der ursprünglichen Schreibmethode von pdo sehr ähnlich?

 ④Unterstützt die Erstellung mehrerer Datenbankverbindungen

Die ursprüngliche Methode unterstützt nicht mehrere Datenbankverbindungen, da es sich lediglich um eine Datenbankbetriebsmethode handelt. Bei der Implementierung müssen Sie zwei identische Dateien kopieren und einige ändern Variablen. Die Operation ist wirklich kompliziert. Dieses Problem ist nun gelöst.

Code kopieren Der Code lautet wie folgt:
$db_hoorayos_config = array(
'dsn'=>'mysql:host=localhost;dbname=hoorayos',
'name'= >'root',
'password'=>'hooray'
$db = new HRDB($db_hoorayos_config2 = array(
). 'dsn' =>'mysql:host=localhost;dbname=hoorayos2',
'name'=>'root',
'password'=>'hooray'
); >$db2 = new HRDB($db_hoorayos_config2);

Auf diese Weise können zwei Datenbankverbindungen gleichzeitig erstellt werden, um die Interaktion zwischen der Datenbank und der Datenbank zu erleichtern.

Das sind die ganzen neuen Funktionen, der gesamte Code ist nicht viel, willkommen zum Lesen und Verstehen. Das Folgende ist der Testcode, den ich beim Schreiben geschrieben habe, und er steht auch jedem zum Lernen zur Verfügung.

Code kopieren Der Code lautet wie folgt:
require_once('global.php');
require_once('inc/setting.inc.php');

$db = new HRDB ($db_hoorayos_config);

echo '


select test
'
echo 'Normaler Modus, übergeben Sie die Zeichenfolge direkt in< br> ;';
$rs = $db->select(1, 0, 'tb_member', 'username, password', 'and type = 1 and username like "%os%"'); echo '
Array-Modus, Sie können ein Array übergeben
$fields = array('username', 'password'); , ' Benutzername wie "%os%"');
$rs = $db->select(1, 0, 'tb_member', $fields, $where);

echo '< hr> insert test
'; 'tb_member', 'username = "test", type = 1, lastlogindt = now()');
echo '
Array-Modus, Sie können ein Array übergeben
$set = array('username = "test"', 'type = 1', 'lastlogindt = now()');
$db->insert(1, 0, 'tb_member', $set);

echo '
update test
';
echo 'Normaler Modus, übergeben Sie die Zeichenfolge direkt in
'; db->update(1, 0, 'tb_member', 'username = "123", type = 1, lastlogindt = now()', 'and tbid = 7');
echo '$set = array('username = "123"', 'type = 1', 'lastlogindt = now()'); array('tbid = 1');
$db->update(1, 0, 'tb_member', $set, $where);

echo '

';
echo 'Normaler Modus, übergeben Sie die Zeichenfolge direkt in
'; tbid = 1 und username = "hurra"');
echo '
Array-Modus, Sie können ein Array übergeben
$where = array(
'tbid = 1 ',
'username = "hurra"'
);
$db->delete(1, 0, 'tb_member', $where);

echo '< ;hr> ;Custom sql
';
$db->query('select username, passwort from tb_member'); );
var_dump($rs);

$db->close();

Stellungnahme:
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