Mostrar erros:
$wpdb->show_errors = true
mostra erros automaticamente, se WP_DEBUG
estiver definido comotrue
.
$wpdb->suppress_errors = false
pára de suprimir erros.
Multissite precisa de tratamento especial
// Show errors in Multisite:
global $wpdb, $blog_id;
// There's no is_multisite(), so we need to check the ID
// This means, that we can't debug the blog with the ID 1 as MU-blog by default
// Check if we are on Blog ID#1 and if not, check the defines and add error handling
if ( 1 !== $blog_id )
! defined( 'DIEONDBERROR' ) AND define( 'DIEONDBERROR', true );
Manuseio de saída
O $wpdb->update()
método possui três saídas diferentes. Para verificar, você deve salvar o resultado ia var:$result = $wpdb->update( /* ... */ );
.
O lidar com esses cenários:
false === $result
: Falhou
0 === $result
: Sucesso, mas nenhuma atualização
0 < $result
: Sucesso
Saída de classe
$wpdb->last_error
mostrará o último erro, se você tiver um.
$wpdb->last_query
ajudará você a mostrar a última consulta (onde ocorreu o erro). É basicamente o mesmo que array_pop( $wpbd->queries );
.
Nota importante (segurança)
Por favor, não adicione códigos no local ao vivo. Especialmente se plugins de cache estiverem envolvidos. Isso pode expor dados importantes relacionados ao banco de dados para os visitantes !
Se você não pode fazer o contrário: sempre envolva seu código em instruções condicionais para evitar saída de depuração voltada para o público!
// Example
function debug_query( $result, $data )
{
global $current_user;
get_currentuserinfo();
if ( current_user_can( 'manage_options' ) )
{
global $wpdb, $blog_id;
1 !== $blog_id
AND ! defined( 'DIEONDBERROR' )
AND define( 'DIEONDBERROR', true );
$wpdb->show_errors = true;
$wpdb->suppress_errors = false;
$output = '<pre style="white-space:pre-line;">';
$output .= 'Last Error: ';
$output .= var_export( $wpdb->last_error, true );
$output .= "\n\nLast Query: ";
$output .= var_export( $wpdb->last_query, true );
if ( false === $result )
{
$result = new WP_Error( 'query_failed', 'No update.', $data );
}
elseif ( 0 === $result )
{
$result = new WP_Error( 'update_failed', 'Updated zero rows.', $data );
}
elseif ( 0 < $result )
{
$result = 'Success';
}
$output .= '</pre>';
// Only abort, if we got an error
is_wp_error( $result )
AND exit( $output.$result->get_error_message() );
}
}
A exposição do $wpdb
objeto também pode expor o nome de usuário e a senha do banco de dados!