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

Tạo truy vấn động trong MySQL thủ tục được lưu trữ

Bạn đang nối pArea tham số vào SQL không được trích dẫn. Đó là nội dung của @Query mà bạn chuẩn bị để thực hiện là:

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

Kể từ Teynampet không được trích dẫn, nó được phân tích cú pháp như một định danh SQL (n không xác định) chứ không phải là một chuỗi. Bạn nên:

  • trích dẫn nó trong SQL của bạn:

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • chuyển nó vào câu lệnh đã chuẩn bị dưới dạng tham số:

    SET @City  = CONCAT(' WHERE AreaName = ?');
    SET @param = pArea;
    

    và sau đó:

    EXECUTE stmt USING @param;
    

Tuy nhiên, tại sao lại sử dụng câu lệnh chuẩn bị ở đây? Thủ tục của bạn có thể được viết lại dưới dạng SELECT đơn giản (điều này đặt ra câu hỏi liệu bạn có cần sử dụng một quy trình đã lưu trữ hay không):

CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
  SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');

(Lưu ý rằng tôi khuyên bạn nên sử dụng NULL thay vì chuỗi trống '' , trong trường hợp đó, kiểm tra trên sẽ là pArea IS NULL OR pArea = AreaName ).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phát hiện các giá trị trùng lặp trong tương lai khi lặp qua các kết quả MySQL trong PHP

  2. Tham số 'LIMIT' hoạt động như thế nào trong sql?

  3. PHP - Azure mySQL trong ứng dụng được thay đổi cổng ngẫu nhiên

  4. Neo4j - Tạo mối quan hệ bằng Cypher

  5. Cách tìm điểm khác biệt trung bình của N lần đọc cuối cùng của một cột PHP MySQL