2012-07-06 75 views
2

我期待做的完美的小模塊是爲drupal 6而做的,但令我沮喪的是它不適用於drupal 7.我已經瞭解到drupal 7有一個用於數據庫的新api 。我試圖讓它工作,但我承認在這裏我的聯盟脫節。我希望有人能給我一點指導。具體用db_query。Drupal 7 db_query

function webform_image_validation_webform_validation_validate($validator_name, $items, 
$components, $rule) { 
$errors = array(); 
if ($items) { 
switch ($validator_name) { 
    case 'max_image_size': 
    $dimensions = explode('x', $rule['data']); 
    foreach ($items as $key => $val) { 
     if (is_numeric($val['_fid'])) { 
     $result = db_query("select * from {files} where fid = %d", $val['_fid']); 
     while ($data = db_fetch_object($result)) { 
      $thefile = $data; 
     } 
     $image_info = image_get_info($thefile->filepath); 
     if (webform_image_validation_validate_image($image_info, $dimensions[0], $dimensions[1], FALSE) === FALSE) { 
      $errors[$key] = t('Your image did not match the required width and/or height. (') . $dimensions[0] . t(' x ') . $dimensions[1] . t(')'); 
     } 
     } 
    } 

這是我收到的錯誤。

Argument 2 passed to db_query() must be an array, string given, called in 
/home/designco/public_html/dev/sites/all/modules/webform_image_validation/ 
webform_image_validation.module on line 69 and defined in 
/home/designco/public_html/dev/includes/database/database.inc on line 2310 

看來我需要添加一個數組,但我迷路了。任何幫助,將不勝感激。我只是想知道我是否正確。

+0

http://drupal.stackexchange.com/ – madth3 2012-07-06 20:57:56

回答

14

db_query的工作方式不同在Drupal7。


$result = db_query("select * from {files} where fid = %d", $val['_fid']); 
while ($data = db_fetch_object($result)) { 
    $thefile = $data; 
} 
becomes
 
$results = db_query("select * from {files} where fid = :fid", array(':fid' => $val['_fid'])); 
foreach($results as $result) { 
    // Do your thing for each result. 
} 

1

嘗試改變

$result = db_query("select * from {files} where fid = %d", $val['_fid']); 
while ($data = db_fetch_object($result)) { 
    $thefile = $data; 
} 

$query = db_select('files', 'f') 
    ->fields('f') 
    ->condition('fid', $val['_fid']); 
$thefile = $query->execute()->fetchObject(); 

Drupal的7數據庫API文檔http://drupal.org/node/310069

+0

我繼續嘗試,但現在得到這個錯誤。我很感激幫助。 'DOException:SQLSTATE [42S02]:未找到基本表或視圖:1146'designco_drupal.files'不存在:SELECT f。* FROM {files} f WHERE(fid =:db_condition_placeholder_0); Array([:db_condition_placeholder_0] => 8)' – 2012-07-06 22:20:11

+0

Drupal 7中沒有'{files}'表,它已被重命名爲'{file_managed}' – Clive 2012-07-07 22:10:41

+0

啊!我應該意識到這一點。用db_select('file_managed','f')替換db_select('files','f') – 2012-07-07 22:34:54

1

謝謝JurgenR爲答案。

只需添加一件事:在drupal 6中,我們使用'%s'作爲字符串。在drupal 7中,對所有人來說都是一樣的。 例如:

$results = db_query("select * from {files} 
where filename = :fname", array(':fname' => $filename)); 

如果你想搜索與模式開始,然後查詢將記錄:

$results = db_query("select * from {files} 
where filename = :fname", array(':fname' => $filename.'%')); 

希望這是非常有用的。