2017-07-28 11 views
5

Tôi đang sử dụng ASP cổ điển và MySQL (sử dụng PHP sẽ không thay đổi điểm của câu hỏi).THIẾT LẬP một biến trong mysql chỉ một lần

Tôi cần phải thiết lập một biến trên trang chủ của tôi:

SET block_encryption_mode = 'aes-256-cbc' 

tôi không thể thiết lập nó như là biến toàn cầu như những người dùng khác đang sử dụng máy chủ và có thể sử dụng mặc định block_encryption_mode.

Tôi biết tôi có thể sử dụng câu lệnh bằng ASP/PHP ở đầu mỗi trang web, nhưng điều đó có vẻ như sử dụng quá nhiều tài nguyên; mỗi người dùng sẽ thực thi câu lệnh SET trên mỗi trang ...

Có cách nào để SET biến hoặc thực thi một số câu lệnh SQL khác vào lúc bắt đầu mỗi phiên, như một sự kiện khởi đầu như ASP có, có thể không? Hoặc làm cách nào tôi có thể đạt được mục tiêu của mình mà không thực hiện truy vấn cho mỗi người dùng trên mỗi trang tôi có?

Trả lời

2

Gọi an toàn là SET trên mỗi trang khi nó thực thi theo thứ tự micro giây. Có nghĩa là không có cuộc gọi trên không SET trên kết nối đã được mở.

Trừ khi bạn có thể áp dụng cài đặt này trên toàn cầu, tôi sẽ không bận tâm. Chỉ cần đặt block_encryption_mode (cùng với collationtimezone) trực tiếp sau khi có được xử lý kết nối cơ sở dữ liệu.

+1

Nhưng chuỗi này thực hiện trên tất cả các khách hàng, cũng từ các trang web khác mà không muốn SET này có mặt ... – Jerry2

+0

As far như tôi biết block_encryption_mode là biến phiên, do đó, việc sử dụng SET sẽ không ảnh hưởng đến các ứng dụng khách khác. Ngoài ra, tôi đoán bạn sẽ cần quyền quản trị để đặt giá trị cao hơn phiên của riêng bạn. –

3

Bạn có thể sử dụng biến số init_connect.

Chuỗi được thực thi bởi máy chủ cho từng khách hàng kết nối. Chuỗi bao gồm một hoặc nhiều câu lệnh SQL, được phân tách bằng các ký tự dấu chấm phẩy.

Bạn cũng có thể phân biệt được những người sử dụng với mã như thế này:

IF (CURRENT_USER() = '[email protected]') THEN 
    SET SESSION block_encryption_mode = 'aes-256-cbc'; 
END IF; 
Các vấn đề liên quan