Sử dụng THÍCH trong db_query trong D7


19

Tôi có một truy vấn như thế này trong Drupal 6:

$sql = 'SELECT sid, score FROM search_index WHERE word LIKE "%%%s%%"';
$result = db_query($sql,$search_term);

Và nó hoạt động tốt, nhưng giờ tôi đang nâng cấp lên Drupal 7.

Tôi đọc lên và điều này được cho là hoạt động, nhưng nó không phải là:

$sql = 'SELECT sid, score FROM search_index WHERE word LIKE "%:term"';
$result = db_query($sql,array(':term'=>$search_term));

Có ai biết tôi đang làm gì sai không?

Câu trả lời:


18

Thử đi.

 $sql = 'SELECT sid, score FROM {search_index} WHERE word LIKE :term';
 $result = db_query($sql, array(':term' => '%' . db_like($search_term)));

2
db_like ...? Tại sao Drupal, tại sao bạn sẽ làm điều đó?
Coomie

Vâng, Drupal đã giới thiệu một api db mới trong 7, chẳng hạn như db_select(), db_insert(), db_update(), db_condition(), db_like(),, vv Thay vì sử dụng db_query(), nó khuyến cáo sử dụng db_select(). Xem ở đây drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/...
Sithu

6
@Coomie Nếu bạn nhìn vào db_like , bạn sẽ thấy việc thoát được thực hiện cụ thể bởi lớp DB trên cơ sở mỗi động cơ. Điều này được thực hiện vì lý do tính di động.
mpdon Arena

Có đúng là dòng đầu tiên kết thúc bằng dấu phẩy không?
undersound

0

Nếu bạn theo dõi liên kết sau, http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 Điều này sẽ cho bạn biết rằng,

Lưu ý rằng giữ chỗ phải là một giá trị "hoàn thành". Ví dụ: khi chạy truy vấn THÍCH, ký tự đại diện SQL,%, phải là một phần của giá trị, không phải là chính truy vấn.

Vì thế

SELECT nid, title FROM {node} WHERE title LIKE :title%;

Là không chính xác.

Các truy vấn nên được

SELECT nid, title FROM {node} WHERE title LIKE :title;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.