Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara membuat prosedur tersimpan yang berisi DELIMITER di PHP dengan PDO?

Dari komentar:

Bukan begitu cara kerjanya.

Untuk memahami alasannya, Anda perlu memahami bagaimana mysql CLI -- dan program lain yang dapat membaca dan mengeksekusi file dump seperti ini -- sebenarnya menanganinya.

DELIMITER bukan sesuatu yang dimengerti server.

DELIMITER digunakan untuk memberi tahu pengurai sisi klien apa pembatas pernyataan saat ini seharusnya, sehingga parser sisi klien dapat membagi pernyataan dengan benar dan mengirimkannya satu per satu ke server untuk dieksekusi.

Dari dokumen. Perhatikan baik-baik bahwa mysql , setiap kali digunakan di sini, mengacu pada mysql utilitas klien -- bukan servernya.

Jadi, untuk menangani file seperti itu, Anda memerlukan parser sisi klien yang melakukan hal yang sama mysql tidak... dan di sini, kode yang Anda tulis adalah (harus) parser pernyataan sisi klien. Jadi Andalah yang perlu menulis logika untuk menangani pembatas.

Untuk melakukan apa yang Anda inginkan, Anda harus menafsirkan DELIMITER pernyataan, gunakan untuk melacak pembatas pernyataan saat ini, tetapi jangan mengirimkannya ke server.

Kemudian, Anda harus membaca input satu baris pada satu waktu, menyangga apa yang telah Anda baca, hingga Anda menemukan pembatas yang ditentukan di akhir baris, dan mengirim pernyataan yang dihasilkan ke server -- tidak termasuk pembatas pernyataan yang sebenarnya dari apa yang Anda kirim... jadi, misalnya, Anda tidak akan mengirim akhiran $$ setelah badan prosedur (kecuali pembatas pernyataan saat ini adalah ; , yang dapat Anda kirim atau tidak kirim -- server tidak peduli.) Kemudian kosongkan buffer dan mulai membaca lagi hingga Anda melihat contoh pembatas lainnya (dan mengirim pernyataan ke server) atau mencocokkan DELIMITER pernyataan dan atur variabel pembatas kode Anda saat ini untuk mencocokkannya sehingga Anda mengidentifikasi akhir pernyataan berikutnya dengan benar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mendapatkan baris paling mirip di tabel MySQL dan mengurutkannya berdasarkan kesamaan

  2. Menggunakan DISTINCT berdasarkan satu kolom di GROUP BY

  3. Properti tidak terdefinisi:Illuminate\Database\Eloquent\Collection::Laravel 5.2

  4. Wildfly 10 gagal memuat driver MySQL XA saat startup

  5. Masukkan data jika jumlah baris lebih besar dari 0 tidak berfungsi