国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah php教程 php手冊(cè) 全新的PDO數(shù)據(jù)庫(kù)操作類(lèi)php版(僅適用Mysql)

全新的PDO數(shù)據(jù)庫(kù)操作類(lèi)php版(僅適用Mysql)

Jun 13, 2016 am 11:58 AM
mysql pdo php kod pengarang salinan beroperasi pangkalan data tarikh versi baik hati Berlaku

復(fù)制代碼 代碼如下:


/**
* 作者:胡睿
* 日期:2012/07/21
* 電郵:hooray0905@foxmail.com
*/

class HRDB{
protected $pdo;
protected $res;
protected $config;

/*構(gòu)造函數(shù)*/
function __construct($config){
$this->Config = $config;
$this->connect();
}

/*數(shù)據(jù)庫(kù)連接*/
public function connect(){
$this->pdo = new PDO($this->Config['dsn'], $this->Config['name'], $this->Config['password']);
$this->pdo->query('set names utf8;');
//把結(jié)果序列化成stdClass
//$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
//自己寫(xiě)代碼捕獲Exception
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

/*數(shù)據(jù)庫(kù)關(guān)閉*/
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();
}

/**
* 參數(shù)說(shuō)明
* int $debug 是否開(kāi)啟調(diào)試,開(kāi)啟則輸出sql語(yǔ)句
* 0 不開(kāi)啟
* 1 開(kāi)啟
* 2 開(kāi)啟并終止程序
* int $mode 返回類(lèi)型
* 0 返回多條記錄
* 1 返回單條記錄
* 2 返回行數(shù)
* string/array $table 數(shù)據(jù)庫(kù)表,兩種傳值模式
* 普通模式:
* 'tb_member, tb_money'
* 數(shù)組模式:
* array('tb_member', 'tb_money')
* string/array $fields 需要查詢(xún)的數(shù)據(jù)庫(kù)字段,允許為空,默認(rèn)為查找全部,兩種傳值模式
* 普通模式:
* 'username, password'
* 數(shù)組模式:
* array('username', 'password')
* string/array $sqlwhere 查詢(xún)條件,允許為空,兩種傳值模式
* 普通模式:
* 'and type = 1 and username like "%os%"'
* 數(shù)組模式:
* array('type = 1', 'username like "%os%"')
* string $orderby 排序,默認(rèn)為id倒序
*/
public function select($debug, $mode, $table, $fields="*", $sqlwhere="", $orderby="tbid desc"){
//參數(shù)處理
if(is_array($table)){
$table = implode(', ', $table);
}
if(is_array($fields)){
$fields = implode(', ', $fields);
}
if(is_array($sqlwhere)){
$sqlwhere = ' and '.implode(' and ', $sqlwhere);
}
//數(shù)據(jù)庫(kù)操作
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;
}
}
}

/**
* 參數(shù)說(shuō)明
* int $debug 是否開(kāi)啟調(diào)試,開(kāi)啟則輸出sql語(yǔ)句
* 0 不開(kāi)啟
* 1 開(kāi)啟
* 2 開(kāi)啟并終止程序
* int $mode 返回類(lèi)型
* 0 無(wú)返回信息
* 1 返回執(zhí)行條目數(shù)
* 2 返回最后一次插入記錄的id
* string/array $table 數(shù)據(jù)庫(kù)表,兩種傳值模式
* 普通模式:
* 'tb_member, tb_money'
* 數(shù)組模式:
* array('tb_member', 'tb_money')
* string/array $set 需要插入的字段及內(nèi)容,兩種傳值模式
* 普通模式:
* 'username = "test", type = 1, dt = now()'
* 數(shù)組模式:
* array('username = "test"', 'type = 1', 'dt = now()')
*/
public function insert($debug, $mode, $table, $set){
//參數(shù)處理
if(is_array($table)){
$table = implode(', ', $table);
}
if(is_array($set)){
$set = implode(', ', $set);
}
//數(shù)據(jù)庫(kù)操作
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;
}
}
}

/**
* 參數(shù)說(shuō)明
* int $debug 是否開(kāi)啟調(diào)試,開(kāi)啟則輸出sql語(yǔ)句
* 0 不開(kāi)啟
* 1 開(kāi)啟
* 2 開(kāi)啟并終止程序
* int $mode 返回類(lèi)型
* 0 無(wú)返回信息
* 1 返回執(zhí)行條目數(shù)
* string $table 數(shù)據(jù)庫(kù)表,兩種傳值模式
* 普通模式:
* 'tb_member, tb_money'
* 數(shù)組模式:
* array('tb_member', 'tb_money')
* string/array $set 需要更新的字段及內(nèi)容,兩種傳值模式
* 普通模式:
* 'username = "test", type = 1, dt = now()'
* 數(shù)組模式:
* array('username = "test"', 'type = 1', 'dt = now()')
* string/array $sqlwhere 修改條件,允許為空,兩種傳值模式
* 普通模式:
* 'and type = 1 and username like "%os%"'
* 數(shù)組模式:
* array('type = 1', 'username like "%os%"')
*/
public function update($debug, $mode, $table, $set, $sqlwhere=""){
//參數(shù)處理
if(is_array($table)){
$table = implode(', ', $table);
}
if(is_array($set)){
$set = implode(', ', $set);
}
if(is_array($sqlwhere)){
$sqlwhere = ' and '.implode(' and ', $sqlwhere);
}
//數(shù)據(jù)庫(kù)操作
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;
}
}
}

/**
* 參數(shù)說(shuō)明
* int $debug 是否開(kāi)啟調(diào)試,開(kāi)啟則輸出sql語(yǔ)句
* 0 不開(kāi)啟
* 1 開(kāi)啟
* 2 開(kāi)啟并終止程序
* int $mode 返回類(lèi)型
* 0 無(wú)返回信息
* 1 返回執(zhí)行條目數(shù)
* string $table 數(shù)據(jù)庫(kù)表
* string/array $sqlwhere 刪除條件,允許為空,兩種傳值模式
* 普通模式:
* 'and type = 1 and username like "%os%"'
* 數(shù)組模式:
* array('type = 1', 'username like "%os%"')
*/
public function delete($debug, $mode, $table, $sqlwhere=""){
//參數(shù)處理
if(is_array($sqlwhere)){
$sqlwhere = ' and '.implode(' and ', $sqlwhere);
}
//數(shù)據(jù)庫(kù)操作
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;
}
}
}
}


其實(shí)使用上,和之前的相差不大,目的就是為了方便移植。

  本次重寫(xiě)著重處理了幾個(gè)問(wèn)題:

 ?、?insert語(yǔ)句太復(fù)雜,fields與values對(duì)應(yīng)容易出現(xiàn)誤差

  我們看下最常見(jiàn)的一句sql插入語(yǔ)句

復(fù)制代碼 代碼如下:

insert into tb_member (username, type, dt) values ('test', 1, now())


  在傳統(tǒng)模式下,fields和values參數(shù)是分開(kāi)傳入的,但卻要保證兩者參數(shù)傳入的順序一致。這很容易導(dǎo)致順序錯(cuò)亂或者漏傳某個(gè)參數(shù)。

  這次已經(jīng)把問(wèn)題修改了,采用了mysql獨(dú)有的insert語(yǔ)法,同樣是上面那功能,就可以換成這樣的寫(xiě)法

復(fù)制代碼 代碼如下:

insert into tb_member set username = "test", type = 1, lastlogindt = now()


  就像update一樣,一目了然。

 ?、?部分參數(shù)可以用數(shù)組代替

  比如這樣一句sql

復(fù)制代碼 代碼如下:

delete from tb_member where 1=1 and tbid = 1 and username = "hooray"


  在原先調(diào)用方法的時(shí)候,需要手動(dòng)拼裝好where條件,這樣操作的成本很高,現(xiàn)在完全可以用這種形式

復(fù)制代碼 代碼如下:


$where = array(
'tbid = 1',
'username = "hooray"'
);
$db->delete(1, 0, 'tb_member', $where);


  條件再多也不會(huì)打亂你的思路。同樣,不僅僅是where參數(shù),update里的set也可以以這種形式(具體可參見(jiàn)完整源碼)

復(fù)制代碼 代碼如下:


$set = array('username = "123"', 'type = 1', 'lastlogindt = now()');
$where = array('tbid = 1');
$db->update(1, 0, 'tb_member', $set, $where);


 ?、?可自定義sql語(yǔ)句

  有時(shí)候,sql過(guò)于復(fù)雜,導(dǎo)致無(wú)法使用類(lèi)里提供的方法去組裝sql語(yǔ)句,這時(shí)候就需要一個(gè)功能,就是能直接傳入我已經(jīng)組裝好的sql語(yǔ)句執(zhí)行,并返回信息。現(xiàn)在,這功能也有了

復(fù)制代碼 代碼如下:


$db->query('select username, password from tb_member');
$rs = $db->fetchAll();


  是不是很像pdo原生態(tài)的寫(xiě)法?

 ?、?支持創(chuàng)建多數(shù)據(jù)庫(kù)連接

  原先的因?yàn)橹皇菙?shù)據(jù)庫(kù)操作方法,所以并不支持多數(shù)據(jù)庫(kù)連接,在實(shí)現(xiàn)上需要復(fù)制出2個(gè)相同的文件,修改部分變量,操作實(shí)屬?gòu)?fù)雜?,F(xiàn)在這問(wèn)題也解決了。

復(fù)制代碼 代碼如下:


$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);


  這樣就能同時(shí)創(chuàng)建2個(gè)數(shù)據(jù)庫(kù)連接,方便處理數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)交互的情況。

  大致新功能就是這么多了,整個(gè)代碼并不多,歡迎閱讀了解。下面是我在編寫(xiě)時(shí)寫(xiě)的測(cè)試代碼,也一并提供上來(lái),方便大家學(xué)習(xí)。

復(fù)制代碼 代碼如下:


require_once('global.php');
require_once('inc/setting.inc.php');

$db = new HRDB($db_hoorayos_config);

echo '


select測(cè)試
';
echo '普通模式,直接字符串傳入
';
$rs = $db->select(1, 0, 'tb_member', 'username, password', 'and type = 1 and username like "%os%"');
echo '
數(shù)組模式,可傳入數(shù)組
';
$fields = array('username', 'password');
$where = array('type = 1', 'username like "%os%"');
$rs = $db->select(1, 0, 'tb_member', $fields, $where);

echo '
insert測(cè)試
';
echo '普通模式,直接字符串傳入
';
$db->insert(1, 0, 'tb_member', 'username = "test", type = 1, lastlogindt = now()');
echo '
數(shù)組模式,可傳入數(shù)組
';
$set = array('username = "test"', 'type = 1', 'lastlogindt = now()');
$db->insert(1, 0, 'tb_member', $set);

echo '
update測(cè)試
';
echo '普通模式,直接字符串傳入
';
$db->update(1, 0, 'tb_member', 'username = "123", type = 1, lastlogindt = now()', 'and tbid = 7');
echo '
數(shù)組模式,可傳入數(shù)組
';
$set = array('username = "123"', 'type = 1', 'lastlogindt = now()');
$where = array('tbid = 1');
$db->update(1, 0, 'tb_member', $set, $where);

echo '
delete測(cè)試
';
echo '普通模式,直接字符串傳入
';
$db->delete(1, 0, 'tb_member', 'and tbid = 1 and username = "hooray"');
echo '
數(shù)組模式,可傳入數(shù)組
';
$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();

作者:胡尐睿丶
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276
Penalaan Prestasi Pemetaan Objek (ORM) di PHP Penalaan Prestasi Pemetaan Objek (ORM) di PHP Jul 29, 2025 am 05:00 AM

Elakkan masalah pertanyaan n 1, mengurangkan bilangan pertanyaan pangkalan data dengan memuatkan data yang berkaitan terlebih dahulu; 2. Pilih hanya medan yang diperlukan untuk mengelakkan memuat entiti lengkap untuk menjimatkan memori dan jalur lebar; 3. Gunakan strategi cache yang munasabah, seperti cache sekunder doktrin atau hasil pertanyaan frekuensi tinggi Cache; 4. Mengoptimumkan kitaran hayat entiti dan panggilan jelas () secara teratur untuk membebaskan memori untuk mengelakkan limpahan memori; 5. Memastikan indeks pangkalan data wujud dan menganalisis penyata SQL yang dihasilkan untuk mengelakkan pertanyaan yang tidak cekap; 6. Lumpuhkan penjejakan perubahan automatik dalam senario di mana perubahan tidak diperlukan, dan gunakan array atau mod ringan untuk meningkatkan prestasi. Penggunaan ORM yang betul memerlukan menggabungkan pemantauan SQL, caching, pemprosesan batch dan pengoptimuman yang sesuai untuk memastikan prestasi aplikasi sambil mengekalkan kecekapan pembangunan.

VSCODE SETTINGS.JSON Lokasi VSCODE SETTINGS.JSON Lokasi Aug 01, 2025 am 06:12 AM

Fail Tetapan.JSON terletak di laluan peringkat pengguna atau ruang kerja dan digunakan untuk menyesuaikan tetapan vscode. 1. Laluan peringkat pengguna: Windows adalah C: \ Users \\ AppData \ Roaming \ code \ user \ settings.json, macOS adalah /users//library/applicationsupport/code/user/settings.json, linux adalah/ 2. Laluan Tahap Ruang Kerja: .VSCODE/Tetapan dalam Direktori Root Projek

Menyelam jauh ke dalam mekanisme pengumpulan sampah dalaman PHP Menyelam jauh ke dalam mekanisme pengumpulan sampah dalaman PHP Jul 28, 2025 am 04:44 AM

Mekanisme pengumpulan sampah PHP didasarkan pada penghitungan rujukan, tetapi rujukan bulat perlu diproses oleh pemungut sampah pekeliling berkala; 1. Rujukan kiraan rujukan segera memori apabila tidak ada rujukan kepada pembolehubah; 2. Rujukan rujukan menyebabkan memori tidak dapat dikeluarkan secara automatik, dan ia bergantung kepada GC untuk mengesan dan membersihkannya; 3. GC dicetuskan apabila zval "akar yang mungkin" mencapai ambang atau panggilan secara manual gc_collect_cycles (); 4. Aplikasi PHP jangka panjang harus memantau gc_status () dan hubungi gc_collect_cycles () dalam masa untuk mengelakkan kebocoran ingatan; 5. Amalan terbaik termasuk mengelakkan rujukan bulat, menggunakan gc_disable () untuk mengoptimumkan bidang utama prestasi, dan objek dereference melalui kaedah CLEAR () ORM.

Revolusi tanpa pelayan: Menggunakan aplikasi PHP berskala dengan Bref Revolusi tanpa pelayan: Menggunakan aplikasi PHP berskala dengan Bref Jul 28, 2025 am 04:39 AM

Bref membolehkan pemaju PHP membina aplikasi yang berskala dan kos efektif tanpa menguruskan pelayan. 1.Bref membawa PHP ke Awslambda dengan menyediakan lapisan runtime PHP yang dioptimumkan, menyokong Php8.3 dan versi lain, dan dengan lancar mengintegrasikan dengan rangka kerja seperti Laravel dan Symfony; 2. Langkah -langkah penempatan termasuk: memasang Bref menggunakan komposer, mengkonfigurasi serverless.yml untuk menentukan fungsi dan peristiwa, seperti titik akhir HTTP dan perintah artisan; 3. Jalankan perintah ServerlessDeploy untuk melengkapkan penggunaan, secara automatik mengkonfigurasi apigeway dan menjana URL akses; 4. Bagi sekatan Lambda, Bref menyediakan penyelesaian.

Membina objek yang tidak berubah di PHP dengan sifat bacaan Membina objek yang tidak berubah di PHP dengan sifat bacaan Jul 30, 2025 am 05:40 AM

ReadonlypropertiesinPHP8.2canonlybeassignedonceintheconstructororatdeclarationandcannotbemodifiedafterward,enforcingimmutabilityatthelanguagelevel.2.Toachievedeepimmutability,wrapmutabletypeslikearraysinArrayObjectorusecustomimmutablecollectionssucha

Mengintegrasikan PHP dengan model pembelajaran mesin Mengintegrasikan PHP dengan model pembelajaran mesin Jul 28, 2025 am 04:37 AM

UsearestapitobridgePhpandMlmodelsbyrunningthemodelinpythonviaflaskorfastapiandcallingitfromphpusingcurlorguzzle.2.runpythonsc riptsdirectlyFromphpusingExec () ortshell_exec () forsimple, trafficusecases rendah, walaupunThisapproachhassecurityandperformancelimitat

CSS Dark Mode Togol Contoh CSS Dark Mode Togol Contoh Jul 30, 2025 am 05:28 AM

Pertama, gunakan JavaScript untuk mendapatkan pilihan sistem pengguna dan tetapan tema yang disimpan di dalam negara, dan memulakan tema halaman; 1. Struktur HTML mengandungi butang untuk mencetuskan Topik Switching; 2. CSS menggunakan: Root untuk menentukan pembolehubah tema yang cerah, kelas mod-mode mentakrifkan pembolehubah tema gelap, dan menggunakan pembolehubah ini melalui VAR (); 3. JavaScript mengesan lebih suka skema-skema dan membaca LocalStorage untuk menentukan tema awal; 4. Tukar kelas mod gelap pada elemen HTML apabila mengklik butang, dan menjimatkan keadaan semasa ke LocalStorage; 5. Semua perubahan warna disertakan dengan animasi peralihan 0.3 saat untuk meningkatkan pengguna

Bagaimana cara membiakkan pangkalan data di Laravel? Bagaimana cara membiakkan pangkalan data di Laravel? Jul 28, 2025 am 04:23 AM

Buat Fail Seeder: Gunakan PhPartisanMake: SeederSerseeder untuk menghasilkan kelas Seeder, dan masukkan data melalui kilang model atau pertanyaan pangkalan data dalam kaedah RUN; 2. Panggil penyokong lain dalam DatabaseSeeder: Daftar Usereeder, Postseeder, dan lain-lain. Sehingga melalui $ this-> call () untuk memastikan kebergantungan adalah betul; 3. Jalankan Seeder: Jalankan PhPartisandb: Benih untuk menjalankan semua Seeders berdaftar, atau gunakan PhPartisanMigrate: segar-Seed untuk menetapkan semula dan mengisi semula data; 4

See all articles