Странная ошибка PHP: функция не распознает свой собственный параметр

#php

#php

Вопрос:

У меня есть следующая функция:

   public function updateCustomerInternetBanking($value, $column_to_go_by)
  {
    $sql = "
      UPDATE customer c
        JOIN account_import ai ON c.account_import_id = ai.id
        JOIN generic_import gi ON ai.generic_import_id = gi.id
        JOIN import_bundle ib ON gi.import_bundle_id = ib.id
         SET has_internet_banking = 1
       WHERE c.".$column_to_go_by." = ".$this->quote($value)."
         AND ib.id = ".$this->quote($this->getId())."
    ";

    $conn = Doctrine_Manager::connection();
    $conn->execute($sql);
  }
  

Когда я пытаюсь запустить ее в процессе разработки, она работает нормально. Когда я пытаюсь запустить его в рабочей среде, я получаю это:

 PHP Notice:  Undefined variable: column_to_go_by in /var/www/mcif/lib/model/doctrine/ImportBundle.class.php on line 655
  

Как $column_to_go_by может быть неопределенным?!

И просто чтобы вы знали, этот код скопирован прямо из production, и я проверил, что WHERE … строка — это строка 655.

Комментарии:

1. Хорошо, где вы определили эту переменную? :)) При вызове этой функции

2. Какого рода значение $column_to_go_by заполняется?

3. Одинаковы ли версии PHP и конфигурация обработки ошибок при разработке и производстве?

4. Если он говорит, что он не определен, значит, он не определен. Тогда у вас в рабочей среде находится старый код или вы ищете не в том файле.

5. @Wouter Ян ван Тилбург: Извините, я не понимаю.

Ответ №1:

Вы уверены, что передаете обе переменные правильно?

Вызов метода, подобный этому:

updateCustomerInternetBanking(999);

это привело бы к такого рода ошибке.

Комментарии:

1. Это именно то, что происходило. У меня была старая версия определенного файла, который я с тех пор переименовал. Когда я повторно синхронизировался в рабочей среде, этот файл так и не был удален, и поскольку имя класса осталось прежним, файл загружался автоматически. Вызывается старый файл updateCustomerBanking() с неправильным количеством аргументов.

2. приятно, подумал, что если вы не передадите аргумент, у которого нет значения по умолчанию, это выдаст неустранимую ошибку. Но это всего лишь предупреждение в PHP.