Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để tạo một thủ tục được lưu trữ có chứa DELIMITER trong PHP với PDO?

Từ nhận xét:

Đó không phải là cách nó hoạt động.

Để hiểu tại sao, bạn cần hiểu cách mysql CLI - và bất kỳ chương trình nào khác có thể đọc và thực thi một tệp kết xuất như thế này - thực sự xử lý nó.

DELIMITER không phải là thứ mà máy chủ hiểu được.

DELIMITER được sử dụng để thông báo cho trình phân tích cú pháp phía máy khách dấu phân cách câu lệnh hiện tại nên là gì, để trình phân tích cú pháp phía máy khách có thể phân chia chính xác các câu lệnh và gửi từng câu lệnh một đến máy chủ để thực thi.

Từ các tài liệu. Lưu ý cẩn thận rằng mysql , mỗi khi nó được sử dụng ở đây, hãy tham chiếu đến mysql tiện ích khách hàng - không phải máy chủ.

Vì vậy, để xử lý một tệp như vậy, bạn cần một trình phân tích cú pháp phía máy khách thực hiện điều tương tự mysql hiện ... và đây, mã bạn đang viết (cần phải là) trình phân tích cú pháp câu lệnh phía máy khách. Vì vậy, bạn là người cần viết logic để xử lý dấu phân cách.

Để làm những gì bạn muốn, bạn phải diễn giải DELIMITER , sử dụng chúng để theo dõi dấu phân cách câu lệnh hiện tại, nhưng không gửi chúng đến máy chủ.

Sau đó, bạn phải đọc qua đầu vào từng dòng một, lưu vào bộ đệm những gì bạn đã đọc, cho đến khi bạn tìm thấy dấu phân cách được chỉ định ở cuối dòng và gửi câu lệnh kết quả đến máy chủ - loại trừ dấu phân cách câu lệnh thực tế với những gì bạn gửi ... vì vậy, ví dụ:bạn sẽ không gửi phần cuối là $$ sau phần thân thủ tục (trừ khi dấu phân cách câu lệnh hiện tại là ; , bạn có thể gửi hoặc không gửi - máy chủ không quan tâm.) Sau đó, làm trống bộ đệm và bắt đầu đọc lại cho đến khi bạn thấy một phiên bản khác của dấu phân cách (và gửi câu lệnh tới máy chủ) hoặc khớp với một DELIMITER và đặt biến dấu phân tách hiện tại của mã của bạn khớp với nó để bạn xác định chính xác phần cuối của câu lệnh tiếp theo.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO ::__ construct ():Máy chủ đã gửi bộ ký tự (255) không xác định cho máy khách. Vui lòng báo cáo cho các nhà phát triển

  2. MySQL Tìm kiếm hậu tố toàn văn bản (chế độ boolean) - (* apple)

  3. MySql - Cập nhật bảng bằng cách sử dụng trạng thái chọn từ cùng một bảng

  4. PHP Tính toán Số lượng tuyến dưới trong cây nhị phân

  5. Kết nối với Cơ sở dữ liệu Perl