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

sử dụng QUY TRÌNH ĐƯỢC LƯU TRỮ:các kết quả khác nhau trong truy vấn mysqli-> (CALL select_procedure) VS mysqli-> truy vấn (CHỌN ...)

xem xét Tuyên bố Chuẩn bị được sử dụng với concat() như thường lệ.

DROP PROCEDURE if exists myStoredProc101;
DELIMITER $$
CREATE PROCEDURE myStoredProc101
(   pSanitized VARCHAR(124)
)
BEGIN
    set @mySql:=concat("SELECT DISTINCT ID FROM user where match(name) against ('* *",pSanitized,"* *')");
    PREPARE stmt1 FROM @mySql;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
END 
$$
DELIMITER ;

Proc được lưu trữ của bạn không có cơ hội hoạt động vì nó thậm chí không sử dụng tham số của bạn. Những gì bạn đã làm là chôn một cái gì đó bên trong một chuỗi theo nghĩa đen. Ngoài ra, varchar (124) hơi kỳ quặc:p

Về thành công duy nhất mà mọi người có được với các câu lệnh chuẩn bị là sử dụng Biến người dùng (với @ ) so với các nỗ lực không thành công khi sử dụng Biến cục bộ (từ DECLARE). Vì vậy, điều đó có thể giúp bạn tiết kiệm vài giờ đập đầu trong tương lai.

Từ Trang hướng dẫn PHP Thủ tục được lưu trữ :

Đối với việc gọi proc được lưu trữ từ mysqli , vui lòng xem Câu trả lời từ Pablo Tobar. Nó trông không đặc biệt dễ chịu với nhiều biến, nhưng đó dường như là nơi nó đang ở. Cảnh báo Spoiler:sử dụng biến mysql, không phải biến PHP.

Được cho là, Pablo không trả về tập kết quả mà là viết vào OUT var trong proc được lưu trữ. Có lẽ bạn cần làm những gì anh ấy đã làm cho IN tham số và gọi multi_query() , sau đó là store_result() , sau đó là fetch_all() (trong ngắn hạn, PHP tham chiếu một trang lên).

Ngoài ra, một cuộc gọi sẽ được thực hiện bởi Palladium tại đây .

Trong cả hai trường hợp, phải thực hiện đúng trường hợp để tránh lỗ hổng đã biết khi truyền SQL Injection chuyển sang các quy trình thủ tục được lưu trữ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Thêm khóa ngoại

  2. PHP sử dụng CURRENT_TIMESTAMP từ múi giờ miền đông

  3. Cách sử dụng chuỗi .format () trong câu lệnh MySQL?

  4. SQLAlchemy DELETE Lỗi gây ra do có cả lười tải VÀ phiên bản động của cùng một mối quan hệ

  5. Bao gồm các giá trị KHÔNG ĐƯỢC TÌM HIỂU trong kết quả truy vấn MySQL