Запуск запроса MySQL в WordPress приводит к исчезновению HTML-разметки?

#php #mysql #html #wordpress

#php #mysql #HTML #wordpress

Вопрос:

У нас возникла проблема с добавлением запросов MySQL на нашу страницу. Кажется, что всякий раз, когда что-то запускается в верхней части страницы, остальная разметка и функции php, которым нужно следовать, не отображаются / не выполняются.

Вот пример запроса, который вызывает эту проблему:

 global $wpdb;

$add_query = "CREATE TABLE thetesttable
        (
           id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
           product VARCHAR(50)
        )";

$wpdb->query($add_query) or die(mysql_error());
  

Загрузка страницы один раз приводит к пустой странице.

Во второй раз мы видим Table 'thetesttable' already exists , что означает, что наши запросы выполняются.

На странице нет других ошибок или чего-либо еще, обнаруженного Google Chrome.

Что может быть причиной этой проблемы?

Большое спасибо,

Юстиан Мейер

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

1. Какого ответа вы ожидали? Первый раз создаю таблицы, второй раз говорю, что это уже существует, и это ошибка.

2. @RRStoyanov: Пожалуйста, прочитайте вопрос полностью. Это не связано с ошибкой, полученной при создании таблицы во второй раз. Это был тест, чтобы определить, работают ли наши запросы. Проблема в том, что наша разметка страницы не доходит до средства просмотра страницы.

3. Я бы выбрал error_reporting(-1); сначала, чем

4. @RRStoyanov: PHP не выдает никаких ошибок.

5. в отчете об ошибках должны отображаться все ошибки, и если вы можете увидеть, завершается ли скрипт где-либо из-за какой-либо ошибки. например, в моем проекте я устанавливаю error_reporting в false и в то же время регистрирую ошибки. Когда возникает ошибка, я говорю «белый экран» и ничего больше, но когда я проверяю журнал ошибок… Я вижу, что произошла ошибка. Если вы на 100% уверены, что ваш скрипт не содержит ошибок и / или у вас нет подавленного отображения ошибок, тогда все в порядке … все, что я предполагаю на данный момент, неверно.

Ответ №1:

Проблема в том, что ваш запрос возвращает 0, который интерпретируется как false в вашем statment:

 $wpdb->query($add_query) or die(mysql_error());
  

Из wpdb ссылки на класс:

Функция возвращает целое число, соответствующее количеству затронутых / выбранных строк. При возникновении ошибки MySQL функция вернет FALSE. (Примечание: поскольку могут быть возвращены как 0, так и FALSE, убедитесь, что вы используете правильный оператор сравнения: равенство == против идентичности ===).

Что вы должны сделать, это что-то вроде:

 $result = $wpdb->query($add_query);
if ($result === false)
{
  die('Could not run query');
}
  

Редактировать: Кстати, также обратите внимание, что вы не должны использовать mysql_error() так, как вы делаете, когда используете класс wpdb. Чтобы получить последнюю ошибку, вы можете использовать $wpdb->print_error(); .

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

1. @Justian Meyer Смотрите первую строку: результат вашего запроса равен 0, так что: 0 or die() что совпадает с false or die() , поэтому скрипт умирает. Поскольку ошибки не было, mysql_error() пусто. Результат: скрипт успешно завершает работу с пустым сообщением об ошибке при успешном запросе, который возвращает 0.

Ответ №2:

После всех дополнительных комментариев, чем я предлагаю добавить дополнительный запрос, который

SHOW TABLES LIKE 'thetesttable';

Запустите CREATE TABLE запрос, если нет результатов от предыдущего, и пропустите его, если таблица существует.

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

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

2. Почему бы не предоставить больше кода, чем? Из того, что вы даете, ошибок нет. Вы говорите, что ошибок нет, но на самом деле ваш код правильный. Я могу продолжать подбрасывать вам предложения и идеи, а вы можете продолжать отбрасывать такие ответы и отклонять голоса. Не круто, совсем нет…

3. Я выделил проблему, которую я хотел бы решить в моем первоначальном вопросе выше. Ошибка, которую я пытаюсь устранить, не имеет отношения к запросу MySQL или ошибкам, которые он создает, но она отключает остальную часть моего кода. Эта проблема может быть специфичной для WordPress и может быть связана с тем, как глобальная переменная $ wpdb обрабатывает базу данных.

4. @Justian Хорошо… все мои первые предложения касались обработки ошибок php. Я расскажу, что я делаю в таких ситуациях. Я echo 'here'; после каждой функции, которая, как я думаю, может содержать ошибку. Когда я нахожу функцию, я делаю то же самое внутри нее, пока не найду ее и не исправлю. Кроме того, как я уже сказал … с большим количеством кода это тоже будет проще.

5. На самом деле нет никакой дополнительной ценности в предоставлении большего количества кода. Я могу сказать вам прямо сейчас, что echo 'here'; после того, как запрос не будет выполняться корректно, потому что это проблема, о которой я упоминал выше (см. Выделенный жирным шрифтом текст в исходном вопросе). Похоже, мы ни к чему не пришли с этим. Спасибо за вашу помощь, но я подожду, пока другие респонденты помогут мне с этой проблемой.