ใช้ LIKE ใน db_query ใน D7


19

ฉันมีแบบสอบถามเช่นนี้ใน Drupal 6:

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

มันใช้งานได้ดี แต่ตอนนี้ฉันกำลังอัพเกรดเป็น Drupal 7

ฉันอ่านและนี่ควรจะใช้ได้ แต่ไม่ใช่:

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

ไม่มีใครรู้ว่าฉันทำอะไรผิดหรือเปล่า?

คำตอบ:


18

ลองสิ่งนี้

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

2
db_like ... ทำไมต้องเป็น Drupal ทำไมคุณถึงทำอย่างนั้น
Coomie

ใช่ Drupal เปิดตัว API ฐานข้อมูลใหม่ใน 7 เช่นdb_select(), db_insert(), db_update(), db_condition(), db_like()และอื่น ๆ แทนการใช้ก็แนะนำให้ใช้db_query() db_select()ดูที่นี่drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/ …
Sithu

6
@Coomie หากคุณดูที่db_likeคุณจะเห็นว่าการหลบหนีนั้นกระทำโดยชั้น DB ในแบบต่อเครื่องยนต์ สิ่งนี้ทำเพื่อเหตุผลในการพกพา
mpdonadio

ถูกต้องหรือไม่ที่บรรทัดแรกลงท้ายด้วยเครื่องหมายจุลภาค?
ใต้

0

หากคุณติดตามลิงก์ต่อไปนี้ http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 สิ่งนี้จะบอกคุณว่า

โปรดทราบว่าตัวยึดตำแหน่งควรเป็นค่า "สมบูรณ์" ตัวอย่างเช่นเมื่อเรียกใช้แบบสอบถาม LIKE อักขระตัวแทน SQL ควรเป็นส่วนหนึ่งของค่าไม่ใช่แบบสอบถามเอง

ดังนั้น

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

ไม่ถูกต้อง

แบบสอบถามควรจะเป็น

SELECT nid, title FROM {node} WHERE title LIKE :title;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.