PDO MySQL: Manfaatkan Cache Pertanyaan dan Keselamatan Penyata Disediakan
MySQL menawarkan kedua-dua penyata disediakan asli dan cache pertanyaan untuk pengoptimuman dan keselamatan. Walau bagaimanapun, persoalan timbul: yang manakah harus diutamakan dalam konfigurasi PDO?
Menyanggah Mitos
Persepsi umum ialah:
Walau bagaimanapun, kenyataan ini mungkin tidak berlaku dengan versi MySQL dan PHP terkini.
Prestasi lwn. Keselamatan
Dari segi prestasi, versi MySQL 5.1.17 atau lebih tinggi membenarkan caching pertanyaan dengan pernyataan yang disediakan. Oleh itu, adalah mungkin untuk memanfaatkan kedua-dua prestasi dan keselamatan dengan versi MySQL dan PHP yang lebih baharu.
Mengenai keselamatan, kenyataan yang disediakan asli tidak menawarkan perlindungan tambahan terhadap suntikan SQL. PDO sudah terlepas daripada nilai parameter pertanyaan dan proses ini tidak terjejas oleh tetapan EMULATE_PREPARES.
Pelaporan Ralat
Pernyataan yang disediakan asli mencetuskan ralat sintaks semasa penyediaan, manakala dicontohi disediakan kenyataan menangguhkan ralat tersebut kepada masa pelaksanaan. Ini menjejaskan kod yang anda tulis, terutamanya dengan PDO::ERRMODE_EXCEPTION.
Pertimbangan Tambahan
Cadangan
Untuk versi MySQL dan PHP yang lebih lama, ia adalah disyorkan untuk mencontohi kenyataan yang disediakan. Walau bagaimanapun, untuk versi yang lebih baharu, pernyataan yang disediakan asli harus digunakan (dengan mematikan emulasi).
Fungsi Sambungan PDO Tersuai
Di bawah ialah coretan kod untuk sambungan PDO berfungsi dengan tetapan optimum:
function connect_PDO($settings) { $emulate_prepares_below_version = '5.1.17'; $dsnpairs = []; foreach ($settings as $k => $v) { if ($v !== null) { $dsnpairs[] = "{$k}={$v}"; } } $dsn = 'mysql:'.implode(';', $dsnpairs); $dbh = new PDO($dsn, $settings['user'], $settings['pass']); $serverversion = $dbh->getAttribute(PDO::ATTR_SERVER_VERSION); $emulate_prepares = (version_compare($serverversion, $emulate_prepares_below_version, '<')); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, $emulate_prepares); return $dbh; }
Dengan memanfaatkan fungsi ini atau menyesuaikannya dengan khusus anda pilihan, anda boleh mencapai keseimbangan ideal antara prestasi dan keselamatan dalam sambungan PDO anda.
Atas ialah kandungan terperinci PDO MySQL: Penyata Disediakan atau Cache Pertanyaan? Mana Yang Perlu Anda Utamakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!