0

我刚刚接手了一个老同事做的 Drupal 7.14 网站。我已经登录,但是每当我转到管理 > 内容并单击“编辑”以编辑我的任何基本页面的内容时,我都会收到以下错误消息:

PDOException:SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列 'source':SELECT url_alias.* FROM {url_alias} url_alias WHERE (source = :db_condition_placeholder_0) ;path_load() 中的数组( [:db_condition_placeholder_0] => node/1 )(/home/sites/mediamatterstechnology.com/public_html/includes/path.inc 的第 419 行)。

此外,如果我进入 Admin > Configuration > URL Aliases,我会收到类似的消息,如下所示:

PDOException:SQLSTATE [42S22]:找不到列:1054 'where 子句'中的未知列'语言':SELECT 1 FROM {url_alias} WHERE 语言 <>:语言限制 0、1;path_admin_overview() 中的数组( [:language] => und )(/home/sites/mediamatterstechnology.com/public_html/modules/modules/path/path.admin.inc 的第 18 行)。

对于这方面的任何帮助,我将不胜感激。我已经为此工作了好几天,但我是 Drupal 的新手。

截屏

4

1 回答 1

0

Drupal 5Drupal 6没有这些字段中的一个(或两个)。该数据库不包含这些字段的原因可能是:

  • 网站从 Drupal 5 / Drupal 6 更新到 Drupal 7,更新不成功
  • 数据库已损坏
  • 一个模块从数据库中删除了字段
  • 这些字段被手动删除

您可以做的是将缺少的字段添加到数据库中,尝试首先更新现有字段(如果站点是从以前的 Drupal 版本更新的,并且更新不成功)。

以下代码应该有所帮助。

// Drop indexes.
@db_drop_index('url_alias', 'src_language_pid');
@db_drop_unique_key('url_alias', 'dst_language_pid');

// Rename the fields, and increase their length to 255 characters.
@db_change_field('url_alias', 'src', 'source', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
@db_change_field('url_alias', 'dst', 'alias', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));

if (db_field_exists('url_alias', 'language')) {
  $spec = array(
    'description' => "The language this alias is for; if 'und', the alias will be used for unknown languages. Each Drupal path can have an alias for each supported language.",
    'type' => 'varchar',
    'length' => 12,
    'not null' => TRUE,
    'default' => '',
  );
  db_change_field('url_alias', 'language', 'language', $spec);
  db_update('url_alias')
    ->fields(array('language' => LANGUAGE_NONE))
    ->condition('language', '')
    ->execute();
}
else {
  $spec = array(
    'description' => "The language this alias is for; if 'und', the alias will be used for unknown languages. Each Drupal path can have an alias for each supported language.",
    'type' => 'varchar',
    'length' => 12,
    'not null' => TRUE,
    'default' => '',
  );
  db_add_field('url_alias', 'language', $spec);
}

// Add indexes back.
@db_add_index('url_alias', 'source_language_pid', array('source', 'language', 'pid'));
@db_add_index('url_alias', 'alias_language_pid', array('alias', 'language', 'pid'));

如果此代码没有获取缺失的字段,则它不是失败的更新。在这种情况下,您可以使用以下代码,当您确定站点不是从早于 Drupal 7 的 Drupal 版本更新时,应该使用该代码。

// Drop indexes.
@db_drop_index('url_alias', 'src_language_pid');
@db_drop_unique_key('url_alias', 'dst_language_pid');

$spec = array(
  'description' => "The language this alias is for; if 'und', the alias will be used for unknown languages. Each Drupal path can have an alias for each supported language.",
  'type' => 'varchar',
  'length' => 12,
  'not null' => TRUE,
  'default' => '',
);
db_add_field('url_alias', 'language', $spec);

$spec = array(
  'type' => 'varchar',
  'length' => 255,
  'not null' => TRUE,
  'default' => ''
);

db_add_field('url_alias', 'source', $spec);

// Add indexes back.
@db_add_index('url_alias', 'source_language_pid', array('source', 'language', 'pid'));
@db_add_index('url_alias', 'alias_language_pid', array('alias', 'language', 'pid'));

该代码是根据在更新以前的 Drupal 版本时从系统模块使用的更新代码编写的。我添加的部分是创建数据库字段的部分,因为数据库字段通常是在 Drupal 安装期间创建的。

于 2013-04-08T16:18:28.430 回答