2012-06-23 33 views

Trả lời

8

tôi sẽ làm:

$result = db_select('taxonomy_index', 'ti') 
    ->fields('ti', array('tid')) 
    ->condition('tid', 1) 
    ->condition('nid', 1) 
    ->range(0, 1) 
    ->execute() 
    ->rowCount(); 

if ($result) { 
    drupal_set_message(t('Exists')); 
} 

Không liên quan đến câu hỏi của bạn, nhưng bạn nên luôn luôn sử dụng placeholders để bảo vệ chống SQL Injection - tuy nhiên nếu bạn sử dụng xây dựng truy vấn như trên sau đó nó sẽ chăm sóc điều đó cho bạn. Ngoài ra, bạn nên luôn sử dụng hàm t() khi viết văn bản vào màn hình.

+0

hmm, cách tốt nhất, nhưng tôi không thể nói, đó là cách nhanh nhất :) bỏ phiếu! – Bob

+0

Bằng cách này là tốt, các cột được lập chỉ mục anyway vì vậy tôi không thể nhìn thấy điều này là đủ chậm để đảm bảo việc tìm kiếm một cách khác. Có thể đáng để tính thời gian truy vấn mất và đăng lại, hãy xem các hàm này http://api.drupal.org/api/search/7/timer_ –

6

db_select() chậm hơn db_query(). Xem this thread cho các tình huống trong đó db_select() phù hợp hơn db_query().

db_query() -> fetchField() là cách tiếp cận đơn giản nhất. Xem đoạn mã sau:

<?php 

// Returns string(5) "admin" 
var_dump(db_query('select name from {users} where uid = 1')->fetchField()); 

// Returns bool(false) 
var_dump(db_query('select name from {users} where uid = -1')->fetchField()); 

</pre> 
+0

Đây là ví dụ tốt nhất mà tôi đã thấy cho cách thay thế hàm 'db_result()' của Drupal 6 (tức là 'if (db_result ($ query)) {// do stuff} else {// no records}') – DrewT

Các vấn đề liên quan