D7 में db_query में LIKE का उपयोग करना


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 ...? क्यों द्रुपाल, तुम ऐसा क्यों करोगे?
Coomie

हाँ, Drupal जैसे 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
Sithu

6
@Coomie यदि आप db_like को देखते हैं, तो आप देखेंगे कि भागने को विशेष रूप से प्रति-इंजन के आधार पर DB परत द्वारा किया जाता है। यह पोर्टेबिलिटी कारणों से किया जाता है।
mpdonadio

क्या यह सही है कि पहली पंक्ति अल्पविराम से समाप्त होती है?
अंडर

0

यदि आप निम्न लिंक का अनुसरण करते हैं, तो http://api.drupal.org/api/drupal/includddatabase! -Database.inc/group/database/7 यह आपको बताएगा कि;

ध्यान दें कि प्लेसहोल्डर्स का "पूर्ण" मान होना चाहिए। उदाहरण के लिए, SQL वाइल्डकार्ड वर्ण का LIKE क्वेरी चलाते समय%, मान का ही हिस्सा होना चाहिए, न कि क्वेरी का।

इसलिए

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

गलत है।

क्वेरी होनी चाहिए

SELECT nid, title FROM {node} WHERE title LIKE :title;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.