Mostrar errores:
-
$wpdb->show_errors = true
muestra los errores automáticamente, si WP_DEBUG
se establece en true
.
-
$wpdb->suppress_errors = false
deja de suprimir los errores.
-
Multisite 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 método $wpdb->update()
tiene tres salidas diferentes. Para verificarlo, debe guardar el resultado en una var: $result = $wpdb->update( /* ... */ );
.
El manejo de esos escenarios:
-
false === $result
: Fail
-
0 === $result
: éxito, pero ninguna actualización
-
0 < $result
: éxito
Salida de clase
-
$wpdb->last_error
le mostrará el último error, si obtuvo uno.
-
$wpdb->last_query
lo 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 agregue estos códigos en el sitio en vivo. Especialmente no si se trata de complementos de caché. Esto puede exponer datos importantes relacionados con la base de datos a los visitantes !
Si no puede hacer lo contrario: ¡siempre ajuste su código en sentencias condicionales para evitar que el público salga de la depuración!
// 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() );
}
}
La exposición del objeto $wpdb
también puede exponer el nombre de usuario y la contraseña de su base de datos.