Проблема создания таблицы с dbDelta

Я работаю над плагином, который успешно создает таблицу.

Тем не менее, я решил протестировать его в новой установке WordPress (на моем локальном сервере), и теперь таблица не создается в моем коде активации. Вместо этого я получаю сообщение об ошибке:

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

Вот мой код:

function nc_create_location_table() { // makes the location table global $wpdb; global $simple_location_version; $table_name = $wpdb->prefix . "nc_location"; $installed_ver = get_option( "simple_location_version" ); if( $installed_ver != $simple_location_version ) { $sql = "CREATE TABLE " . $table_name . " ( location_id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, PRIMARY KEY (location_id), name VARCHAR (100), street_no VARCHAR (5), street_name VARCHAR (75), city VARCHAR (75), province_state VARCHAR (75), postal_code VARCHAR(10), country VARCHAR (75) );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); update_option("simple_location_version", $simple_location_version); } $tmp = get_option('nc_location_options'); if(($tmp['chkbox_reset']=='on')||(!is_array($tmp))) { echo 'setting defaults'; $arr = array( "nc_location_zoom"=>10, "nc_location_width" => "200", "nc_location_height" => "200", "nc_location_drop_down_maptype" => "road", ); update_option('nc_location_options', $arr); } } register_activation_hook(__FILE__,'nc_create_location_table'); 

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

Если кто-нибудь может рассказать о том, почему работающий код теперь не работает (а также, возможно ли увидеть, где неожиданный вывод …, поскольку нет отображения того, что ошибка отличается от этого сообщения)?

 if( $installed_ver != $simple_location_version ) { 

при первом запуске $installed_ver – пустая строка, а $simple_location_version – NULL, поэтому этот тест неравенства завершится неудачно, и ваш SQL никогда не будет выполнен.

если вы проверите строгое неравенство, оно будет работать:

 if( $installed_ver !== $simple_location_version ) { 

Чтобы ответить

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

Каждое изложение echo вызовет это. Обычно это всего лишь количество символов, которые вы echo отзывались.


Вот ссылка на мой класс деинсталляции / деактивации (простой / ванильный) для плагинов. Вы можете посмотреть, как я выводить ошибки в admin_notices для проверки поведения. Вы можете попробовать его с помощью $this->error( "DB-Error: {$wpdb->last_error}", true ); (или посмотрите на основной файл wpdb, я могу ошибаться в отношении объекта var), чтобы узнать, что происходит после вызова dbDelta. В любом случае: не эхо, и вы не получите сообщение об ошибке / ошибке / неожиданном сообщении о символе и заголовке.

Еще один грубый способ исследования ошибки «неожиданного выхода» – выполнить exit() в строке 1569 из wp-admin / includes / upgrade.php. Он вызывается в конце функции dbDelta, что позволит вам увидеть результат, который был сгенерирован, и быстро исправить проблему, предполагая, что проблема связана с dbDelta. У меня были трудности, похожие на вас, когда у меня что-то не так с SQL для функции dbDelta, и эта стратегия помогла отладить ее. Это не самое лучшее решение, но оно может помочь в некоторых ситуациях.