cari
Rumahpembangunan bahagian belakangmasalah PHPKelebihan 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!

Kelebihan dan kekurangan php merangkum contoh pdo dan sambungan panjang pdo

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

Terdapat juga sambungan

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. sqlpdo3. 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

2. Adakah sambungan panjang tidak sah untuk nginx

Apabila blogger sedang mencari pengetahuan tentang sambungan panjang, dia melihat satu artikel dan membuat kesimpulan bahawa sambungan panjang hanya digunakan untuk apache dan bukan untuk

, adakah ini benar? nginx

参考博文地址:https://www.cnblogs.com/wpjamer/articles/7106389.html
Kesimpulan 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

Dan untuk

, sambungan yang panjang adalah tidak sah. Adakah sumber akan dikeluarkan apabila pelaksanaan skrip tamat? nginx

3. Ujian sambungan panjang di bawah php-fpm

Senior sudah mengujinya di sini >

参考博文地址:https://hacpai.com/article/1526490593632
Kesimpulan:

Fakta telah membuktikan bahawa boleh mencapai sambungan yang panjang, tetapi jika proses itu terbiar, ia akan menyebabkan pembaziran sumber.
php-fpm Fail konfigurasi

boleh mempertimbangkan tetapan

, yang mewakili bilangan maksimum perkhidmatan yang diminta untuk setiap sub-proses Jika nilai ini melebihi, sub-proses akan dimulakan semula secara automatik. php-fpmpm.max_requests = 1000 Contohnya, jika parameter

ditetapkan kepada nilai yang sangat besar, proses anak perlu dijalankan berkali-kali sebelum dimulakan semula Jika ralat berlaku dalam permintaan ini atau kebocoran memori berlaku, maka ia adalah tidak sesuai untuk menetapkan nilai ini kepada nilai yang sangat besar. Tetapi jika tiada masalah dengan permintaan, jika nilai ini ditetapkan kepada nilai yang kecil, ia akan dimulakan semula dengan kerap, yang juga akan menghadapi banyak masalah

, jadi ia adalah masalah pertimbangan dan kebijaksanaan tetapan permulaan max_requests Jika diuji Tiada masalah seperti kebocoran memori, dan ia boleh menjadi lebih besar. 50210004. Kesan sambungan yang lama pada urus niaga

参考博文地址:https://www.zhihu.com/question/62603122
Ringkasan:

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错误,而这个错误是phpwarnings级别错误,try..catch根本就捕获不到,所以博主这里自定义错误处理函数来处理。

      这部分是转化phpwarnings错误为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!

Kenyataan
Artikel ini dikembalikan pada:CSDN. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Asid vs pangkalan data asas: perbezaan dan bila menggunakan setiap.Asid vs pangkalan data asas: perbezaan dan bila menggunakan setiap.Mar 26, 2025 pm 04:19 PM

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

PHP Secure File Muat naik: Mencegah kelemahan berkaitan fail.PHP Secure File Muat naik: Mencegah kelemahan berkaitan fail.Mar 26, 2025 pm 04:18 PM

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.

Pengesahan Input PHP: Amalan Terbaik.Pengesahan Input PHP: Amalan Terbaik.Mar 26, 2025 pm 04:17 PM

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.

PHP API Kadar Mengehadkan: Strategi Pelaksanaan.PHP API Kadar Mengehadkan: Strategi Pelaksanaan.Mar 26, 2025 pm 04:16 PM

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

PHP Kata Laluan Hashing: password_hash dan password_verify.PHP Kata Laluan Hashing: password_hash dan password_verify.Mar 26, 2025 pm 04:15 PM

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

OWASP Top 10 PHP: Huraikan dan mengurangkan kelemahan umum.OWASP Top 10 PHP: Huraikan dan mengurangkan kelemahan umum.Mar 26, 2025 pm 04:13 PM

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.

Pencegahan PHP XSS: Bagaimana Melindungi Terhadap XSS.Pencegahan PHP XSS: Bagaimana Melindungi Terhadap XSS.Mar 26, 2025 pm 04:12 PM

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.

PHP Interface vs Kelas Abstrak: Bila Menggunakan Setiap.PHP Interface vs Kelas Abstrak: Bila Menggunakan Setiap.Mar 26, 2025 pm 04:11 PM

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

See all articles

Alat AI Hot

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.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

MinGW - GNU Minimalis untuk Windows

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

Dreamweaver CS6

Alat pembangunan web visual

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma