Mengapa perpustakaan MySQLi tidak menyokong parameter bernama secara asli?
P粉024986150
P粉024986150 2023-10-31 09:54:43
0
2
641

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.

P粉024986150
P粉024986150

membalas semua(2)
P粉792026467

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.

P粉533898694

MYSQLi Parameter yang dinamakan tidak disokong atas dua sebab utama:

  1. Ia adalah "bermaksud" (saya menggunakan istilah ini secara longgar) untuk digunakan dengan pembungkus, dan
  2. Rakan sejawatnya PDO melakukannya - dan tidak perlu mencipta semula roda

Untuk menghuraikan perkara 1: mysqli, walaupun mempunyai banyak kelemahan berbanding mysqli,尽管与 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:

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

mysqlipdo 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? Gunakan mysqli。您想要命名参数吗?使用 PDO 或构建 mysqli atau bina pembungkus mysqli untuk mengendalikan perkara ini - tetapi ambil perhatian bahawa ini akan menghalang masa pelaksanaan anda.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan