bind_param("i",$id);Tetapi jangan sekali-kali melakukan ini:"> Mengapa perpustakaan MySQLi tidak menyokong parameter bernama secara asli?-Soal Jawab Rangkaian PHP Cina
Mengapa perpustakaan MySQLi tidak menyokong parameter bernama secara asli?
P粉024986150
P粉024986150 2023-10-31 09:54:43
0
2
488

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 ialahMySQL 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 bukanDAL 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

    MYSQLiParameter 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 sejawatnyaPDOmelakukannya - dan tidak perlu mencipta semula roda

    Untuk 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:

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

    mysqlipdoKedua-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? Gunakanmysqlitanpa pembalut. Adakah anda mahu parameter bernama? Gunakanmysqli。您想要命名参数吗?使用PDO或构建mysqliatau bina pembungkusmysqliuntuk 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
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!