Adakah kos penggunaan menyediakan dan membuat pertanyaan sama untuk pernyataan pertanyaan SQL yang sama?
$sql = $pdo -> prepare("pilih * dari jadual");
$sql -> laksanakan();
$rs = $sql ->
$rs = $go -> fetch(PDO :: FETCH_ASSOC);
Sebagai contoh, adakah persediaan dan pertanyaan pertanyaan di atas sama cekap? (Abaikan suntikan pernyataan SQL).
Single Yang manakah lebih baik digunakan untuk hasil pertanyaan? Adakah menyediakan menghantar pangkalan data sekurang-kurangnya dua kali ke pangkalan data apabila membuat pertanyaan?
1.PDO::query melaksanakan pernyataan SQL dan, jika diluluskan, mengembalikan objek PDOStatement. Fungsi PDO::query mempunyai "perkara yang sangat baik", iaitu, ia boleh terus melintasi set rekod yang dikembalikan.
2.PDO::exec melaksanakan pernyataan SQL dan mengembalikan bilangan baris yang terjejas. Fungsi ini tidak mengembalikan koleksi hasil. Syor rasmi:
Untuk pernyataan SELECT yang hanya perlu dikeluarkan sekali dalam program, pertimbangkan untuk menggunakan PDO::query().
Untuk kenyataan yang perlu dikeluarkan beberapa kali, anda boleh menggunakan PDO::prepare() untuk menyediakan objek PDOStatement dan gunakan PDOStatement::execute() untuk mengeluarkan kenyataan.
PDO::exec menyokong pelaksanaan semua pernyataan SQL seperti SELECT/DELETE/UPDATE/INSERT, jadi ia lebih berkuasa daripada fungsi PDO query(). Oleh kerana hanya fungsi yang terjejas dikembalikan, jika anda melaksanakan SELECT, anda tidak boleh mendapatkan objek PDOStatement, jadi anda tidak boleh melintasi set hasil Anda hanya boleh menggunakan pertanyaan atau melaksanakan fungsi mengikut cadangan rasmi. .
3 Prinsip penyediaan adalah ini Pernyataan sql dihantar ke pelayan sql untuk dikompilasi terlebih dahulu, dan kemudian ia sebenarnya dilaksanakan apabila eksekusi dilaksanakan. Compile sekali, laksanakan berkali-kali. Jika hanya terdapat satu pertanyaan, kecekapan penyediaan dan pertanyaan pada asasnya adalah sama. Jika dilaksanakan beberapa kali, kecekapan penyediaan akan didedahkan. Selain itu, tidak semua suntikan SQL boleh dihalang, seperti di mana dalam (" ").