Problema ao criar uma tabela com dbDelta

Estou trabalhando em um plugin que estava criando uma tabela com sucesso.

No entanto, eu decidi testá-lo em uma nova instalação do WordPress (no meu servidor local) e agora a tabela não está sendo criada no meu código de ativação. Em vez disso, recebo a mensagem de erro:

O plugin gerou 149 caracteres de saída inesperada durante a ativação. Se você notar mensagens “encaminhamentos já enviadas”, problemas com feeds de distribuição ou outros problemas, tente desativar ou remover este plugin.

Aqui está o meu código:

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

Quando eu verificar minhas tabelas, vejo que minha tabela não foi criada, e também estou recebendo uma mensagem de erro.

Se alguém puder acender a luz porque o código que estava funcionando agora não está funcionando (e também é possível ver onde a saída inesperada é … pois não há exibição sobre o que o erro é diferente dessa mensagem)?

Solutions Collecting From Web of "Problema ao criar uma tabela com dbDelta"

 if( $installed_ver != $simple_location_version ) { 

na primeira execução, $installed_ver é uma string vazia e $simple_location_version é NULL, então esse teste de desigualdade falhará e seu SQL nunca será executado.

Se você verificar uma desigualdade rigorosa, isso funcionará:

 if( $installed_ver !== $simple_location_version ) { 

Para responder o

O plugin gerou 149 caracteres de saída inesperada durante a ativação. Se você notar mensagens “encaminhamentos já enviadas”, problemas com feeds de distribuição ou outros problemas, tente desativar ou remover este plugin.

Cada declaração de echo mostrará isso. Normalmente é apenas a contagem de personagens que você falou.


Aqui está um link para minha class de desinstalação / ativação / desativação (plain / vanilla) para plugins. Você pode ver como eu emite erros em admin_notices para verificar o comportamento. Você poderia tentar com $this->error( "DB-Error: {$wpdb->last_error}", true ); (ou dê uma olhada no arquivo do núcleo do wpdb, posso estar errado com o object var) para ver o que está acontecendo após a chamada do dbDelta. De qualquer forma: não faça eco e você não receberá a mensagem de aviso / erro / inesperado de caracteres e header enviados.

Outra maneira grosseira de investigar o erro “saída inesperada” é executar exit() na linha 1569 de wp-admin / includes / upgrade.php. É chamado no final da function dbDelta, que permitirá que você veja a saída que foi gerada e corrigir rapidamente o problema, assumindo o problema com o dbDelta. Eu tive dificuldades semelhantes às suas quando eu tinha algo errado com o SQL para a function dbDelta e essa estratégia ajudou a destruí-la. Não é a maior solução, mas pode ajudar em algumas situações.