Betulkan sintaks pertanyaan berparameter MySQLi daripada http://php.net/manual/en/mysqli.quickstart.prepared-statements.php:
$stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"); $stmt->bind_param("i", $id);
Tetapi jangan sekali-kali melakukan ini:
$stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (:id_value)"); $stmt->bind_param("i", "id_value", $id);
Pada pendapat saya, 命名参数
替换是在API级别实现的合理功能。令我惊讶的是,MySQLi 在库中只实现了 未命名参数
.
Ada sebab yang munasabah? Melihat bagaimana PDO, DQL, ORM semua mengambil parameter bernama dalam pertanyaan, ini tidak masuk akal kepada saya.
Saya harap pembangun MySQLi tidak masuk ke dalam situasi "kami malas dan tidak mahu". Saya percaya mesti ada sebab yang kukuh, dan saya sedang mencari sebab itu, atau cara untuk mencari sebab itu. Sebab mengapa parameter bernama tidak dilaksanakan dalam perpustakaan sambungan MySQLi.
Secara tradisinya, MySQLi ialah MySQL API. Ia tidak menambah apa-apa dengan sendirinya, dan ada sebab untuk itu: menambah fungsi seperti ruang letak yang dinamakan memerlukan (jika anda memikirkannya) keseluruhan penghuraian pertanyaan SQL. Sudah tentu, ini bukan tugas API pangkalan data. Seperti yang dinyatakan dalam jawapan lain, API bukan DAL atau DBAL; ia mempunyai tujuan yang berbeza.
PDO ialah pencapaian hebat yang jarang anda lihat dalam bahasa lagi, dan Wes Furlong ialah seorang genius yang hampir seorang diri memikul tugas itu. Tetapi PDO adalah cerita lain. Ia adalah lapisan abstraksi akses pangkalan data, dan untuk mencapainya, sama ada anda suka atau tidak, anda memerlukan penghurai pertanyaan. Memandangkan anda sudah mempunyai penghurai pertanyaan dan salah satu pemacu sudah menyokong ruang letak yang dinamakan, adalah wajar untuk menambahkannya pada semua pemacu yang disokong. Seperti yang anda lihat, semuanya berubah dengan MySQLi.
Ringkasnya, ia bukan "malas", tetapi "malas". Ia mengenai mengikut norma.
MYSQLi
Parameter yang dinamakan tidak disokong atas dua sebab utama:PDO
melakukannya - dan tidak perlu mencipta semula rodaUntuk menghuraikan perkara 1:
mysqli
, walaupun mempunyai banyak kelemahan berbandingmysqli
,尽管与PDO
, mudah dibandingkan dengan pembungkus yang baik - iaitu parameter yang dinamakan (antara lain) disediakan oleh pembungkus Ia tidak disokong oleh mysqli itu sendiri. Ini adalah dengan reka bentuk dan untuk satu sebab sahaja:Mysqli
Direka untuk menjadi perpustakaan yang pantas dan fleksibel.Jika pembangun memasukkan lebih banyak fungsi ke dalam perpustakaan asas, secara berlawanan dengan intuisi, ia menjadi kurang fleksibel dan mengambil masa yang lebih lama untuk memuat/melaksanakan.
mysqli
和pdo
Kedua-duanya dikeluarkan dengan PHP 5 (saya percaya versi PDO ialah 5.3), jadi mempunyai kegunaan yang berbeza.Adakah anda mahukan masa pelaksanaan yang lebih pantas? Gunakan
mysqli
tanpa pembalut. Adakah anda mahu parameter bernama? Gunakanmysqli
。您想要命名参数吗?使用PDO
或构建mysqli
atau bina pembungkusmysqli
untuk mengendalikan perkara ini - tetapi ambil perhatian bahawa ini akan menghalang masa pelaksanaan anda.