mysql — Reference — Что означает эта ошибка в PHP?

Что это?

Это ряд ответов о предупреждениях, ошибках и уведомлениях, с которыми вы можете столкнуться при программировании PHP, и не знаете, как их исправить. Это также Вики Сообщества, поэтому каждый приглашен принять участие в добавлении и поддержании этого списка.

Почему это?

Вопросы как «Заголовки уже отправлены» или же «Вызов члена не-объекта» часто всплывает на переполнение стека. Коренная причина этих вопросов всегда одна и та же. Таким образом, ответы на эти вопросы обычно повторяют их, а затем показывают ОП, какую линию изменить в его / ее конкретном случае. Эти ответы не добавляют никакой ценности сайту, поскольку они применяются только к конкретному коду ОП. Другие пользователи, имеющие ту же ошибку, не могут легко прочитать решение из нее, потому что они слишком локализованы. Это печально, потому что, как только вы поняли основную причину, исправление ошибки становится тривиальным. Следовательно, этот список пытается объяснить решение в общем виде для применения.

Что мне здесь делать?

Если ваш вопрос был помечен как дубликат этого, найдите ваше сообщение об ошибке ниже и примените исправление к вашему коду. Ответы обычно содержат дополнительные ссылки для расследования в случае, если это не должно быть ясно только из общего ответа.

Если вы хотите внести свой вклад, пожалуйста, добавьте свое «любимое» сообщение об ошибке, предупреждение или уведомление, по одному на ответ, краткое описание, что оно означает (даже если оно только выделяет термины на их странице руководства), возможное решение или подход отладки и список существующих Q&А, которые имеют значение. Кроме того, не стесняйтесь улучшать любые существующие ответы.

Список

Также см

+993

Решение

Предупреждение: невозможно изменить информацию заголовка — заголовки уже отправлены

Происходит, когда ваш скрипт пытается отправить HTTP-заголовок клиенту, но ранее он уже выводился, что привело к тому, что заголовки уже были отправлены клиенту.

Это E_WARNING и это не остановит сценарий.

Типичным примером будет файл шаблона, подобный этому:

<html>
<?php session_start(); ?>
<head><title>My Page</title>
</html>
...

session_start() Функция попытается отправить заголовки с файлом cookie сеанса клиенту. Но PHP уже отправил заголовки, когда он написал <html> элемент для выходного потока. Вы должны были бы переместить session_start() наверх

Вы можете решить это, пройдя по линиям до код, запускающий предупреждение, и проверьте, где он выводится. Переместите любой код отправки заголовка перед этим кодом.

Часто пропускаемый вывод — это новые строки после закрытия PHP ?>, Это считается стандартной практикой, чтобы пропустить ?> когда это последняя вещь в файле. Аналогичным образом, еще одна распространенная причина этого предупреждения, когда открытие <?php перед ним стоит пустой пробел, строка или невидимый символ, что заставляет веб-сервер отправлять заголовки и пробел / символ новой строки, поэтому при запуске синтаксического анализа PHP не сможет отправлять заголовки.

Если в вашем файле более одного <?php ... ?> Блок кода в нем, между ними не должно быть пробелов. (Примечание: у вас может быть несколько блоков, если у вас есть код, который был автоматически создан)

Также убедитесь, что в вашем коде нет меток порядка следования байтов, например, когда код сценария UTF-8 с спецификацией.

Смежные вопросы:

244

Другие решения

Неустранимая ошибка: вызов функции-члена … для необъекта

Бывает с кодом, похожим на xyz->method() где xyz не является объектом и, следовательно, что method нельзя назвать.

Это фатальная ошибка, которая приводит к остановке скрипта (уведомление о прямой совместимости: это станет исправимой ошибкой, начиная с PHP 7).

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

типичный пример будет

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

В приведенном выше примере запрос не может быть подготовлен и prepare() назначит false в $statement, Пытаясь позвонить execute() метод приведет к фатальной ошибке, потому что false является «необъектом», потому что значение является логическим.

Вычислять Зачем ваша функция вернула логическое значение вместо объекта. Например, проверьте $pdo объект для последней произошедшей ошибки. Детали того, как отладить это, будут зависеть от того, как обрабатываются ошибки для конкретной рассматриваемой функции / объекта / класса.

Если даже ->prepare терпит неудачу, то ваш $pdo объект дескриптора базы данных не были переданы в текущую область. Найдите, где это было определено. Затем передайте его как параметр, сохраните как свойство или поделитесь им через глобальную область видимости.

Другой проблемой может быть условное создание объекта, а затем попытка вызова метода вне этого условного блока. Например

if ($someCondition) {
$myObj = new MyObj();
}
// ...
$myObj->someMethod();

При попытке выполнить метод за пределами условного блока ваш объект может быть не определен.

Смежные вопросы:

173

Ничего не видно Страница пустая и белая.

Также известный как Белая страница смерти или же Белый экран смерти. Это происходит, когда сообщение об ошибке отключено и произошла фатальная ошибка (часто синтаксическая ошибка).

Если у вас включено ведение журнала ошибок, вы найдете конкретное сообщение об ошибке в вашем журнале ошибок. Обычно это находится в файле с именем «php_errors.log», либо в центральном месте (например, /var/log/apache2 во многих средах Linux) или в каталоге самого скрипта (иногда используется в среде общего хостинга).

Иногда может быть проще временно включить отображение ошибок. На белой странице появится сообщение об ошибке. Будьте осторожны, потому что эти ошибки видны всем, кто посещает сайт.

Это легко сделать, добавив вверху скрипта следующий код PHP:

ini_set('display_errors', 1); error_reporting(~0);

Код включит отображение ошибок и установит отчетность на самом высоком уровне.

Так как ini_set() выполняется во время выполнения, это не влияет на синтаксические и синтаксические ошибки. Эти ошибки появятся в журнале. Если вы хотите отобразить их также в выходных данных (например, в браузере), вы должны установить display_startup_errors директива к true, Сделайте это либо в php.ini или в .htaccess или любой другой метод, который влияет на конфигурацию до время выполнения.

Вы можете использовать те же методы, чтобы установить log_errors а также журнал ошибок директивы, чтобы выбрать свое собственное местоположение файла журнала.

Просматривая журнал или используя дисплей, вы получите гораздо лучшее сообщение об ошибке и строку кода, где ваш скрипт останавливается.

Смежные вопросы:

Связанные ошибки:

107

Примечание: неопределенный индекс

Происходит при попытке доступа к массиву по ключу, который не существует в массиве.

Типичный пример Undefined Index уведомление будет (демонстрация)

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

И то и другое spinach а также 1 не существуют в массиве, вызывая E_NOTICE быть вызванным.

Решение состоит в том, чтобы убедиться, что индекс или смещение существует до доступа к этому индексу. Это может означать, что вам нужно исправить ошибку в вашей программе, чтобы убедиться, что эти индексы существуют, когда вы их ожидаете. Или это может означать, что вам нужно проверить, существуют ли индексы, используя array_key_exists или же isset:

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
echo $data['spinach'];
}
else {
echo 'No key spinach in the array';
}

Если у вас есть такой код:

<?php echo $_POST['message']; ?>
<form method="post" action="">
<input type="text" name="message">
...

затем $_POST['message'] не будет установлен при первой загрузке этой страницы, и вы получите вышеуказанную ошибку. Индекс массива будет существовать только после отправки формы и повторного запуска этого кода. Вы обычно проверяете это с помощью:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

Смежные вопросы:

93

Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, учитывая логическое значение

В первую очередь:

Пожалуйста, не используйте mysql_* функции в новом коде. Они больше не поддерживаются и официально устарели. Увидеть красная коробка? Узнать о готовые заявления вместо этого и использовать PDO или же MySQLiЭта статья поможет вам решить, какой. Если вы выбираете PDO, вот хороший урок.


Это происходит, когда вы пытаетесь получить данные из результата mysql_query но запрос не удался.

Это предупреждение, которое не остановит сценарий, но сделает вашу программу неправильной.

Вам нужно проверить результат, возвращенный mysql_query от

$res = mysql_query($sql);
if (!$res) {
die(mysql_error());
}
// after checking, do the fetch

Смежные вопросы:

Связанные ошибки:

Другой mysql* функции, которые также ожидают результирующий ресурс MySQL в качестве параметра, будут вызывать ту же ошибку по той же причине.

80

Неустранимая ошибка: использование $ this, когда не в контексте объекта

$this это специальная переменная в PHP который не может быть назначен. Если к нему обращаются в контексте, где это не существует, эта фатальная ошибка дана.

Эта ошибка может произойти:

  1. Если нестатический метод вызывается статически. Пример:

    class Foo {
    protected $var;
    public function __construct($var) {
    $this->var = $var;
    }
    
    public static function bar () {
    // ^^^^^^
    echo $this->var;
    //   ^^^^^
    }
    }
    
    Foo::bar();
    

    Как исправить: пересмотрите свой код еще раз, $this может использоваться только в контексте объекта и никогда не должен использоваться в статическом методе. Кроме того, статический метод не должен обращаться к нестатическому свойству. использование self::$static_property получить доступ к статическому свойству.

  2. Если код из метода класса был скопирован в обычную функцию или просто глобальную область видимости а также сохраняя $this специальная переменная.
    Как исправить: Просмотрите код и замените $this с другой переменной замещения.

Смежные вопросы:

  1. Вызвать нестатический метод как статический: Неустранимая ошибка PHP: использование $ this, когда оно не в контексте объекта
  2. Скопируйте код: Неустранимая ошибка: использование $ this, когда не в контексте объекта
  3. Все вопросы «Использование $ this, когда не в контексте объекта» вопросы о Stackoverflow
71

Неустранимая ошибка: вызов неопределенной функции XXX

Происходит при попытке вызвать функцию, которая еще не определена. Распространенные причины включают отсутствующие расширения и включения, объявление условной функции, функцию в объявлении функции или простые опечатки.

Пример 1 — Объявление условной функции

$someCondition = false;
if ($someCondition === true) {
function fn() {
return 1;
}
}
echo fn(); // triggers error

В этом случае, fn() никогда не будет объявлено, потому что $someCondition неправда.

Пример 2 — функция в объявлении функции

function createFn()
{
function fn() {
return 1;
}
}
echo fn(); // triggers error

В этом случае, fn будет объявлен только один раз createFn() вызывается. Обратите внимание, что последующие звонки createFn() вызовет ошибку об объявлении существующей функции.

Вы также можете увидеть это для встроенной функции PHP. Попробуйте найти функцию в официальное руководство, и проверьте, к какому «расширению» (модулю PHP) он принадлежит, и какие версии PHP его поддерживают.

В случае отсутствия расширения установите это расширение и включите его в php.ini. Обратитесь к инструкции по установке в руководстве по PHP, чтобы узнать расширение, в котором отображается ваша функция. Вы также можете включить или установить расширение с помощью диспетчера пакетов (например, apt в Debian или Ubuntu, yum в Red Hat или CentOS) или панель управления в среде общего хостинга.

Если функция была введена в более новой версии PHP из того, что вы используете, вы можете найти ссылки на альтернативные реализации в руководстве или его разделе комментариев. Если он был удален из PHP, поищите информацию о том, почему, поскольку в этом больше нет необходимости.

В случае отсутствия включений обязательно включите файл, объявляющий функцию, прежде чем вызывать функцию.

В случае опечаток, исправьте опечатку.

Смежные вопросы:

69

Ошибка разбора: синтаксическая ошибка, неожиданный T_XXX

Бывает когда у тебя T_XXX знак в неожиданном месте, несбалансированные (лишние) скобки, использование короткого тега без его активации в php.ini и многое другое.

Смежные вопросы:

Для дальнейшей помощи смотрите:

  • http://phpcodechecker.com/ — Который действительно дает некоторые более полезные объяснения ваших проблем синтаксиса.
67
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector