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.