【问题标题】:Drupal 7 db_queryDrupal 7 数据库查询
【发布时间】:2012-07-06 20:46:49
【问题描述】:

我想要做的完美小模块是为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

看来我需要添加一个数组,但我迷路了。任何帮助,将不胜感激。我只是想知道我是否走对了路。

【问题讨论】:

标签: database drupal-7


【解决方案1】:

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 作为 $result) { // 为每个结果做你的事。 }

【讨论】:

    【解决方案2】:

    尝试改变

    $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

    【讨论】:

    • 我继续尝试,但现在出现此错误。我很感激帮助。 DOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'designco_drupal.files' doesn't exist: SELECT f.* FROM {files} f WHERE (fid = :db_condition_placeholder_0) ; Array ( [:db_condition_placeholder_0] => 8 )
    • Drupal 7 中没有{files} 表,已重命名为{file_managed}
    • 啊,当然!我应该意识到这一点。只需将 db_select('files', 'f') 替换为 db_select('file_managed', 'f')
    【解决方案3】:

    感谢JurgenR 的回答。

    再补充一点:在 drupal 6 中,我们使用 '%s' 表示字符串。在 drupal 7 中,对所有人都是一样的。 例如:

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

    如果您想搜索以 pattern 开头的记录,则查询将是:

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

    希望这是有用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 2012-04-23
      • 2011-04-13
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多