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']]);
}
}
}
}