drupal7のインストールでsqliteを選択するとエラー
問題
drupal7をインストールしたいのですが、エラーでできません。
sqliteが選択できそうなのでsqliteの方でインストールしようとしたのですが、途中でエラーになります。
Warning: Illegal string offset 'field' in UpdateQuery_sqlite->removeFieldsInCondition() (line 75 of /usr/share/drupal7/includes/database/sqlite/query.inc). Warning: Illegal string offset 'field' in UpdateQuery_sqlite->removeFieldsInCondition() (line 79 of /usr/share/drupal7/includes/database/sqlite/query.inc).
答え
環境は php5.4でしょうか。php5.3以前なら大丈夫なようですが、5.4以降で問題があるようです。
以下のように修正すべしとのこと。
diff --git a/includes/database/sqlite/query.inc b/includes/database/sqlite/query.inc index 6b8a72f..68e6f14 100644 --- a/includes/database/sqlite/query.inc +++ b/includes/database/sqlite/query.inc @@ -71,12 +71,14 @@ class UpdateQuery_sqlite extends UpdateQuery { * A database condition. */ protected function removeFieldsInCondition(&$fields, QueryConditionInterface $condition) { - foreach ($condition->conditions() as $child_condition) { - if ($child_condition['field'] instanceof QueryConditionInterface) { - $this->removeFieldsInCondition($fields, $child_condition['field']); - } - else { - unset($fields[$child_condition['field']]); + foreach ($condition->conditions() as $key => $child_condition) { + if (isset($child_condition['field'])) { + if ($child_condition['field'] instanceof QueryConditionInterface) { + $this->removeFieldsInCondition($fields, $child_condition['field']); + } + else { + unset($fields[$child_condition['field']]); + } } } }
手作業で書き換える場合は
ファイル includes/database/sqlite/query.inc の removeFieldsInCondition メソッドの中で、foreach(){…} のループに、以下のようにif文を追加するとOK。
class UpdateQuery_sqlite extends UpdateQuery { /** */ protected function removeFieldsInCondition(&$fields, QueryConditionInterface $condition) { foreach ($condition->conditions() as $child_condition) { if (isset($child_condition['field'])) { if ($child_condition['field'] instanceof QueryConditionInterface) { $this->removeFieldsInCondition($fields, $child_condition['field']); } else { unset($fields[$child_condition['field']]); } } } }
コメント