Mostrar errores:
$wpdb->show_errors = true
muestra errores automáticamente, si WP_DEBUG
está configurado en true
.
$wpdb->suppress_errors = false
deja de suprimir errores.
Multisitio necesita tratamiento 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 );
Manejo de salida
El $wpdb->update()
método tiene tres salidas diferentes. Para comprobar su contra, debe guardar el resultado ia var: $result = $wpdb->update( /* ... */ );
.
El manejo de esos escenarios:
false === $result
: Fallar
0 === $result
: Éxito, pero sin actualización
0 < $result
: Éxito
Salida de clase
$wpdb->last_error
le mostrará el último error, si tiene uno.
$wpdb->last_query
le ayudará a mostrar la última consulta (donde ocurrió el error). Es básicamente lo mismo que array_pop( $wpbd->queries );
.
Nota importante (seguridad)
Por favor, NO añadir estos códigos en el sitio en vivo. Especialmente no si los complementos de almacenamiento en caché están involucrados. ¡Esto puede exponer datos importantes relacionados con DB a los visitantes !
Si no puede hacer lo contrario: ¡siempre envuelva su código en declaraciones condicionales para evitar la salida de depuración de cara al 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() );
}
}
¡Exponer el $wpdb
objeto también puede exponer su nombre de usuario y contraseña de la base de datos!