0

古い同僚が作った Drupal 7.14 の Web サイトを引き継ぎました。ログインしましたが、[管理] > [コンテンツ] に移動し、[編集] をクリックして基本ページのコンテンツを編集するたびに、次のエラー メッセージが表示されます。

PDOException: SQLSTATE[42S22]: 列が見つかりません: 1054 不明な列 'source' in 'where 句': 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 行目)。

また、[管理] > [構成] > [URL エイリアス] に移動すると、以下に示す同様のメッセージが表示されます。

PDOException: SQLSTATE[42S22]: 列が見つかりません: 1054 'where 句' の不明な列 'language': SELECT 1 FROM {url_alias} WHERE language <> :language LIMIT 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には、これらのフィールドが 1 つ (または 2 つ) ありません。そのデータベースにこれらのフィールドが含まれていない理由は次のとおりです。

  • サイトが 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 の以前のバージョンを更新するときに System モジュールから使用される更新コードに基づいて記述されています。データベース フィールドは通常、Drupal のインストール時に作成されるため、追加した部分はデータベース フィールドを作成する部分です。

于 2013-04-08T16:18:28.430 に答える