


Kelebihan dan kekurangan php merangkum contoh pdo dan sambungan panjang pdo
Artikel ini membawakan kepada anda contoh enkapsulasi PHP pdo dalam PHP, serta pengetahuan yang berkaitan tentang sambungan panjang pdo Seperti namanya, sambungan panjang sentiasa mengekalkan sambungan Berbanding dengan sambungan pendek biasa, pautan akan dibuat semula -dicipta dengan setiap permintaan Dikatakan bahawa sambungan yang panjang dapat mengurangkan proses penciptaan dan menjimatkan prestasi dengan lebih baik. Semoga ia membantu semua orang!
1. Prakata
Baru-baru ini saya perlu menulis skrip untuk merealisasikan penyimpanan log ranap sistem, jadi okay, Kami hanya boleh merangkum sendiri operasi berkaitan pangkalan data. Blogger di sini memilih untuk merangkum pdo
operasi yang berkaitan dengan pangkalan data.
2. Mengapa memilih pdo
Seperti yang kita sedia maklum, php
mempunyai mysql
sambungan pada masa awal, tetapi kemudiannya ia kehilangan ciri baharu mysql
kerana ia terlalu lama. Oleh itu kemerosotan kunci utama.
Bermula dari php5
, anda disyorkan untuk menggunakan sambungan mysqli
Ini ialah versi dipertingkatkan bagi sambungan mysql
Ia adalah antara muka berorientasikan objek dan lebih mudah guna. Kelemahannya ialah ia hanya boleh beroperasi MySQL
dan tidak cukup berkuasa. mysql
Ini adalah sambungan terkaya dan menyokong pelbagai pangkalan data Yang penting ia lebih kuat daripada dua sambungan lain dari segi keselamatan Prapemprosesan adalah lebih berkesan dalam mencegah suntikan pdo
. Oleh itu, penulis blog di sini memilih untuk merangkum prepared
operasi berkaitan. sql
pdo
3. Sambungan panjang pdo
1. Apakah sambungan pdo yang panjang
Seperti namanya, sambungan panjang bermaksud mengekalkan sambungan sepanjang masa sambungan pendek biasa, setiap permintaan Dari segi mencipta semula pautan, sambungan panjang boleh mengurangkan proses penciptaan dan menjimatkan prestasi dengan berkesan.
Dalam operasi, apabila menyambung ke pangkalan data, tambah satu lagi parameter:
$pdo = new PDO($dsn, $username, $passwd, [PDO::ATTR_PERSISTENT => true]);selepas
ialah kaedah untuk membuka sambungan yang panjang. PDO::ATTR_PERSISTENT => true
, adakah ini benar? nginx
参考博文地址:https://www.cnblogs.com/wpjamer/articles/7106389.htmlKesimpulan umum ialah: sambungan panjang lebih disasarkan pada
, kerana apache
mengekalkan kumpulan proses Selepas fungsi apache
dihidupkan, apache mpm
akan mengekalkan satu demi satu lalai Dalam kumpulan proses, sambungan selepas apache
sambungan panjang tidak ditutup sebagai sambungan mysql
, tetapi dimasukkan ke dalam kumpulan proses/benang sebagai sesuatu yang tidak dikeluarkan. socet
, sambungan yang panjang adalah tidak sah. Adakah sumber akan dikeluarkan apabila pelaksanaan skrip tamat? nginx
参考博文地址:https://hacpai.com/article/1526490593632Kesimpulan:
Fakta telah membuktikan bahawa boleh mencapai sambungan yang panjang, tetapi jika proses itu terbiar, ia akan menyebabkan pembaziran sumber. php-fpm
Fail konfigurasi
, yang mewakili bilangan maksimum perkhidmatan yang diminta untuk setiap sub-proses Jika nilai ini melebihi, sub-proses akan dimulakan semula secara automatik. php-fpm
pm.max_requests = 1000
Contohnya, jika parameter
, jadi ia adalah masalah pertimbangan dan kebijaksanaan tetapan permulaan max_requests
Jika diuji Tiada masalah seperti kebocoran memori, dan ia boleh menjadi lebih besar. 502
1000
4. Kesan sambungan yang lama pada urus niaga
参考博文地址:https://www.zhihu.com/question/62603122Ringkasan:
Jika konkurensi perniagaan agak besar dan terdapat transaksi, tidak digalakkan untuk menggunakan sambungan panjang. 5 Ringkasan
Semasa carian berterusan, penulis blog mendapati bahawa untuk mencapai prestasi terbaik sambungan panjang, pengumpulan sambungan tidak boleh dielakkan, dan PHP tidak begitu mahir dalam hal itu. Pelaksanaan connection pool memang agak dikesali.
Secara umumnya, adalah mustahil untuk mengkonfigurasi kumpulan sambungan yang sempurna dengan
dalam Di tempat yang perniagaannya lebih kompleks, adalah lebih baik untuk mencuba sambungan yang panjang dengan berhati-hati 1 benang. Ia akan menyebabkan banyak pembaziran sumber. php
如果是某些业务需要持续的数据库操作,比如提交日志接口等,那么是可以考虑打开长连接的,记得设置max_requests
来定量关闭php-fpm
连接,fpm
关闭之后也会自动释放mysql
的连接。
还有pm.max_spare_servers
设置服务器空闲时最大php-fpm
进程数量。
例如: pm.max_spare_servers = 25
如果空闲时,会检查进程数,多于25
个了,就会关闭几个,达到25
个的状态。
擅长swoole
的同学,可以参考这篇文章:
基于swoole扩展实现真正的PHP数据库连接池
四、pdo部分demo的封装
首先这部分博主是参考了一个网友的封装,github
地址如下:
https://github.com/nadirvishun/php-pdo-class
这个网友基本的增删改查都封装好了,而且都有参数预处理,安全性还是可以的。不过既然作为一个基准的类,还是缺少一些东西。
1、断线重连机制
例如重连函数:
/** * @params:重连函数,上限3次 * @date:2020/3/18 * @time:17:03 */ public function customConnect() { try { $this->pdo = new PDO($this->config['dsn'], $this->config['username'], $this->config['password'], $this->config['params']); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //需要将错误处理模式变成异常模式 return true; } catch (Exception $e) { if (stripos($e->getMessage(), 'MySQL server has gone away') !== false || stripos($e->getMessage(),' bytes failed with errno=10053') !==false) { $this->close(); $this->tryNums++; if ($this->tryNums > 3) { return false; } self::customConnect(); } else { $this->throw_exception($e->getMessage()); return false; } } }
2、转化php warnings为try…catch可捕获的错误
这步原因是长连接会频繁的造成mysql gone away
错误,而这个错误是php
的warnings
级别错误,try..catch
根本就捕获不到,所以博主这里自定义错误处理函数来处理。
这部分是转化php
的warnings
错误为try..catch
可以捕获的error
错误,关于php
的报错机制以及错误处理这块,咱们下篇再讨论。
//自定义warnings处理函数set_error_handler('customException');//拿到warnngs错误之后,转化为error错误抛出,这样就可以被try..catch捕获function customException( $error_no, $error_msg, $error_file, $error_line){ throw new \Exception($error_msg,0,null); //throw new \Exception($error_msg);}
3、析构方法回收资源
/** * destruct 关闭数据库连接 */ public function destruct() { $this->pdo = null; }
4、query的时候ping一下
public function query($sql = null, $param = null) { //检测连接是否活跃 $this->pdo_ping(); //判断之前是否有结果集 if (!empty($this->PDOStatement)) { $this->free(); } xxxxxxxxxx }
5、下载地址
这四步完善之后,这个pdo的类还是可以用的,大家需要的话可以去百度云上下载。
链接: https://pan.baidu.com/s/1Siz_bKlhEIVNV99Y0zTzqw 提取码: ebqx
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
Atas ialah kandungan terperinci Kelebihan dan kekurangan php merangkum contoh pdo dan sambungan panjang pdo. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel ini membandingkan model pangkalan data asid dan asas, memperincikan ciri -ciri mereka dan kes penggunaan yang sesuai. Asid mengutamakan integriti data dan konsistensi, sesuai untuk aplikasi kewangan dan e-dagang, sementara asas memberi tumpuan kepada ketersediaan dan

Artikel ini membincangkan mendapatkan muat naik fail PHP untuk mengelakkan kelemahan seperti suntikan kod. Ia memberi tumpuan kepada pengesahan jenis fail, penyimpanan selamat, dan pengendalian ralat untuk meningkatkan keselamatan aplikasi.

Artikel membincangkan amalan terbaik untuk pengesahan input PHP untuk meningkatkan keselamatan, memberi tumpuan kepada teknik seperti menggunakan fungsi terbina dalam, pendekatan putih, dan pengesahan sisi pelayan.

Artikel ini membincangkan strategi untuk melaksanakan kadar API yang mengehadkan PHP, termasuk algoritma seperti baldi token dan baldi bocor, dan menggunakan perpustakaan seperti simfoni/kadar-limiter. Ia juga meliputi pemantauan, had kadar penyesuaian secara dinamik, dan tangan

Artikel ini membincangkan manfaat menggunakan password_hash dan password_verify dalam php untuk mendapatkan kata laluan. Hujah utama ialah fungsi ini meningkatkan perlindungan kata laluan melalui penjanaan garam automatik, algoritma hashing yang kuat, dan secur

Artikel ini membincangkan kelemahan OWASP 10 dalam strategi PHP dan mitigasi. Isu -isu utama termasuk suntikan, pengesahan yang rosak, dan XSS, dengan alat yang disyorkan untuk memantau dan mendapatkan aplikasi PHP.

Artikel ini membincangkan strategi untuk mencegah serangan XSS di PHP, memberi tumpuan kepada sanitisasi input, pengekodan output, dan menggunakan perpustakaan dan kerangka kerja yang meningkatkan keselamatan.

Artikel ini membincangkan penggunaan antara muka dan kelas abstrak dalam PHP, memberi tumpuan kepada masa untuk menggunakan setiap. Antara muka menentukan kontrak tanpa pelaksanaan, sesuai untuk kelas yang tidak berkaitan dan warisan berganda. Kelas Abstrak Memberi Funct Biasa


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Dreamweaver CS6
Alat pembangunan web visual

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma