2008-11-06 32 views
13

tôi muốn làm một cái gì đó như thế này:Trong Delphi 7, làm cách nào để thoát dấu phần trăm (%) trong hàm Định dạng?

SQL.Text := Format('select foo from bar where baz like ''%s%''',[SearchTerm]); 

Nhưng Format không thích mà cuối cùng '%', tất nhiên. Vậy làm thế nào tôi có thể thoát khỏi nó? \%? %%?

Hoặc tôi phải làm điều này:

SQL.Text := Format('select foo from bar where baz like ''%s''',[SearchTerm+'%']); 

?

+2

Lưu ý rằng bạn nên sử dụng tốt hơn các thông số cho truy vấn của bạn, hoặc ít nhất là xử lý các dấu ngoặc kép trong vòng của bạn SearchTerm (ví dụ: thông qua một cuộc gọi QuotedStr()). –

Trả lời

26

Sử dụng khác% trong chuỗi định dạng:

SQL.Text := Format('select foo from bar where baz like ''%s%%''',[SearchTerm]); 
5

bắt buộc: http://xkcd.com/327/ :-)

Tùy thuộc vào bối cảnh, cách tiếp cận của bạn có thể dễ bị SQL injection. Nếu cụm từ tìm kiếm đến từ đầu vào của người dùng, có thể sẽ tốt hơn nếu sử dụng truy vấn được tham số hóa hoặc ít nhất là cố gắng khử trùng đầu vào.

+0

Đúng, nó sẽ là dễ bị tổn thương .. nhưng điều này là cho một POC throwaway. Tôi đã không thực sự tìm ra cách sử dụng truy vấn tham số với LIKE. – Blorgbeard

+1

+1 Tham số sẽ an toàn hơn và nhanh hơn một chút (tùy thuộc vào công cụ DB của bạn và nếu bạn sử dụng lại câu lệnh đã chuẩn bị). Bạn thay thế giá trị chuỗi bằng một tham số và sẽ không chạm vào biểu thức LIKE. Vì vậy, bạn có thể viết 'SQL.Text: = 'chọn foo từ thanh nơi baz như: TERM'' và' ParamByName (' TERM '). AsText: = SearchTerm +'% ''. Không còn vấn đề với dấu ngoặc kép và% ký tự. –

+0

Một trong những yêu thích của tôi, +1 cho truyện tranh đó ;-) –

0

Thêm dấu 2 phần trăm để có 1 giường đơn%
Ví dụ:

Format('select foo from bar where baz like ''%%%s%%'',[SearchString]) 

Cung cấp cho bạn

select foo from bar where baz like '%SearchString%' 
Các vấn đề liên quan