2013-06-26 28 views
5

Tôi đang lưu SQL query trong bảng cơ sở dữ liệu, do đó, lưu tiêu chí sẽ được sử dụng cho dù có thêm bản ghi được nhập vào db hay không.Làm thế nào để Lưu một truy vấn SQL vào một bảng?

Có một kiểu dữ liệu và cú pháp đúng để sử dụng để lưu trữ câu lệnh Truy vấn hay không. Tôi đã đặt kiểu dữ liệu là VARCHAR(1055) vì tôi nghĩ điều đó sẽ là đủ. Có một số MySQL function để đảm bảo văn bản được lưu chính xác về mặt, trích dẫn và lưu giữ một chuỗi duy nhất.

Cập nhật: Lý do lưu truy vấn

Chúng tôi cho phép những người sử dụng của hệ thống để tạo ra một danh sách các chi tiết liên lạc dựa trên những người dùng khác của hệ thống, do đó, họ tạo ra các truy vấn sử dụng một hình thức để chọn nói tất cả người dùng với loại công việc điều hành.

Truy vấn trên được lưu trong cơ sở dữ liệu, để ngay cả khi người dùng mới được thêm vào loại công việc điều hành, chi tiết liên lạc của anh ta sẽ được đưa vào khi gửi liên lạc.

Tôi nghĩ đây là cách tốt nhất để làm điều đó ... bạn có ý tưởng gì không?

+0

Bạn sẽ lưu nó từ đâu? Trực tiếp từ bảng điều khiển? Từ PHP? Từ PhpMyAdmin? –

+0

Một truy vấn SQL của chính nó chỉ là một chuỗi, do đó, 'varchar' có vẻ giống như kiểu dữ liệu chính xác với tôi. Tuy nhiên, việc lưu một truy vấn là rất bất thường. Tôi tưởng tượng có một cách tốt hơn để thực hiện bất cứ điều gì nó là bạn đang cố gắng để thực hiện. Nó cũng có vẻ như bạn đang tạo thêm các điểm chèn SQL tiềm năng trong ứng dụng của bạn, vì vậy bạn sẽ muốn đảm bảo các câu lệnh được khử trùng đúng cách. – David

+0

Từ PHP, hãy kiểm tra lý do cập nhật cho truy vấn – surfer190

Trả lời

3

VARCHAR(1055) sẽ không bao giờ là đủ. Chỉ cần sử dụng TEXT, loại dữ liệu của MySQL cho văn bản có độ dài tùy ý (còn được gọi là CLOB trong các cơ sở dữ liệu khác).

Thông tin thêm nền:

Tuy nhiên, tôi nghĩ rằng có lẽ bạn nên mô hình truy vấn của bạn bằng cách này hay cách khác trên lớp ứng dụng, thay vì lưu trữ đồng bằng SQL văn bản trong cơ sở dữ liệu của bạn . Khi bạn thay đổi lược đồ của mình, tất cả các câu lệnh SQL đó có thể sai. Chúc may mắn di chuyển, sau đó!

Một nhược điểm khác trong cách tiếp cận của bạn là bạn đang tạo ra một vấn đề bảo mật lớn, nếu người dùng được phép nhập SQL tùy ý. Một thực tập sinh tiện lợi có hợp đồng không được kéo dài có thể lưu trữ

DROP DATABASE my_database. 
+0

Vâng tôi nghĩ rằng tôi đã bảo vệ chống lại điều đó bằng cách không cho phép nhập SQl trực tiếp và tôi không bao giờ đăng truy vấn, nó được lưu trữ trong các biến phiên và được tạo ra bởi hệ thống. – surfer190

+0

@StephenH: Chỉ muốn chắc chắn. –

1

Không có loại dữ liệu chính xác để lưu trữ truy vấn.

Nhưng bạn luôn có thể tách các ký tự HTML bằng cách sử dụng ký tự mã HTML.

Hoặc bạn có thể sử dụng PHP htmlentities() để chuyển đổi các nhân vật

0

Tôi tin rằng đây không phải là cách tiếp cận đúng. Bạn không nên lưu trữ truy vấn kết quả trong cơ sở dữ liệu của mình, nhưng thay vào đó bạn nên lưu trữ các tham số dẫn đến việc tạo sql đó. Trong triển khai của bạn khi bạn muốn thay đổi truy vấn đó, bạn sẽ phải phân tích cú pháp SQL được lưu trữ của bạn để lấy các tham số để hiển thị biểu mẫu bộ lọc của bạn cho người dùng.Tuy nhiên, nếu bạn giữ thông số của mình thay vào đó, bạn luôn có thể tạo lại truy vấn khi cần và dễ dàng hiển thị biểu mẫu bộ lọc hiện tại.

Nếu bạn nhấn mạnh lưu trữ SQL tho của bạn, như đã lưu ý trước tôi, TEXT là loại trường chính xác, vì ít có khả năng cắt chuỗi sql của bạn ở giới hạn kích thước trường.

Các vấn đề liên quan