3

私がしようとしている完璧な小さなモジュールは drupal 6 用に作成されましたが、残念なことに drupal 7 では動作しません。drupal 7 にはデータベース用の新しい API があることを知りました。私はそれを機能させようとしましたが、私はここで自分のリーグから外れていることを認めています. 誰かが私に少しのガイダンスを与えてくれることを願っています。具体的には 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

配列を追加する必要があるようですが、そこで迷子になります。どんな助けでも大歓迎です。私は自分が正しい軌道に乗っているかどうかを確かめようとしているだけです。

4

3 に答える 3

15

Drupal7 では db_query の動作が異なります。


$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.
}

于 2012-07-07T06:49:08.140 に答える
1

JurgenR答えてくれてありがとう。

もう 1 つ追加します。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.'%'));

これが役に立つことを願っています。

于 2013-05-31T20:09:56.743 に答える
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

于 2012-07-06T21:40:42.187 に答える