Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WordPress y la Base de Datos

WordPress y la Base de Datos

Presentación sobre la clase $wpdb y buenas prácticas para el meetup de WPLima Abril 2017

More Decks by César J. Aquino Maximiliano

Other Decks in Programming

Transcript

  1. WordPress y la Base de Datos Meetup WPLima - Abril

    2017 César J. Aquino Maximiliano (@cesjam7)
  2. César J. Aquino Maximiliano - Ya con 25 años -

    Software Developer en Orange612 - Bombero Voluntario (B-105) - Profesor de programación para el instituto ISMEM y Fullstack - Futuro papá - Uso gatos en mis diapositivas
  3. $wpdb WordPress defines a class called wpdb, which contains a

    set of functions used to interact with a database $wpdb is a global object. https://codex.wordpress.org/Class_Reference/wpdb
  4. Cómo usar $wpdb Debes llamar al objeto $wpdb al inicio

    de tu archivo o al empezar alguna función en específica. global $wpdb; $resultados= $wpdb->get_results( "SELECT id, name FROM mitablaejemplo" ); o function do_something() { global $wpdb; $resultados= $wpdb->get_results( "SELECT id, name FROM $wpdb->posts" ); }
  5. Qué operaciones puedo hacer con $wpdb - Obtener el nombre

    de las tablas de WP con su prefijo - Traer una columna de una tabla - Traer una fila de una tabla - Traer varios datos de una tabla - Insertar registros - Actualizar registros - Eliminar registros - Proteger de ataques de inyección de SQL - Ejecutar cualquier script
  6. Qué operaciones puedo hacer con $wpdb - Traer una columna

    de una tabla - Traer una fila de una tabla - Traer varios datos de una tabla - Insertar registros - Actualizar registros - Eliminar registros - Proteger de ataques de inyección de SQL - Ejecutar cualquier script CUALQUIERA
  7. $wpdb->get_var() La función get_var toma una consulta y devuelve un

    valor que se puede asignar directamente a una variable. $numberposts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts;"); echo "The number of rows in wp_posts are:" .$numberposts; https://codex.wordpress.org/Class_Reference/wpdb#SELECT_a_Variable
  8. $wpdb->get_row() Esta función sirve para obtener una fila completa de

    una consulta. Esta función toma una consulta y también toma un parámetro para indicar en qué formato debería ser la salida. $posts = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = 1", ARRAY_A); print_r($posts); https://codex.wordpress.org/Class_Reference/wpdb#SELECT_a_Row
  9. $wpdb->get_col() Estea función sirve para obtener una columna de una

    consulta. La salida de esta función es una matriz. $posttitles = $wpdb->get_col( "SELECT post_title FROM $wpdb->posts;" ); foreach ( $posttitles as $title ) { echo $title; } https://codex.wordpress.org/Class_Reference/wpdb#SELECT_a_Column
  10. $wpdb->get_results() Esta función se utiliza para obtener una salida de

    una consulta que tiene salida como varias filas y varias columnas. $result = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = ‘publish’"); print_r($result); https://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results
  11. Inyección de SQL Muchas veces usamos datos proporcionados por el

    usuario, en un formulario por ejemplo. Esto puede causar problemas en caso de que haya una inyección de SQL en la consulta. En la inyección de SQL, el atacante inyecta una consulta en un valor de formulario que utilizará para crear una consulta de base de datos. Estas consultas pueden ser tan peligrosas como descargar la base de datos completa hasta eliminar toda la base de datos. http://en.wikipedia.org/wiki/SQL_injection
  12. $wpdb->prepare() La función prepare debe usarse para proteger contra la

    inyección SQL. El método de preparación es muy similar al método printf que toma una consulta y luego los valores de los parámetros que se van a sustituir. Por lo tanto, en caso de que quisiéramos obtener los detalles del puesto de un ID en particular en el que el ID se obtiene de un campo de formulario que debe utilizar la función de preparación para desinfectar la consulta como se muestra a continuación. $post = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE ID = %d",$id)); print_r($post); https://developer.wordpress.org/reference/classes/wpdb/prepare/
  13. $wpdb->insert() Esta función nos permite insertar un registro a una

    tabla de nuestra base de datos. $wpdb->insert( $wpdb->postmeta, array('post_id' => 1, 'meta_key' => 'price', 'meta_value' => '500' ), array( '%d', '%s', '%s') ); https://codex.wordpress.org/Class_Reference/wpdb#INSERT_row
  14. $wpdb->update() wpdb también proporciona un método de actualización mediante el

    cual puede actualizar algunos valores en una tabla de base de datos. $wpdb->update( $wpdb->postmeta, array('meta_value' => '750'), array('post_id' => 1, 'meta_key' => 'price' ) ); https://codex.wordpress.org/Class_Reference/wpdb#UPDATE_rows
  15. $wpdb->delete() Esta función se utiliza para eliminar filas de una

    tabla de base de datos. $wpdb->delete( $wpdb->posts, array( 'ID' => 1 ) ); https://codex.wordpress.org/Class_Reference/wpdb#DELETE_Rows
  16. Funciones propias de WordPress - WP_Query - wp_insert_post() - wp_update_post()

    - wp_delete_post() - add_post_meta() - update_post_meta()
  17. Para más información: Charla para traer el wp-admin al front

    https://speakerdeck.com/cesjam7/trayendo-el-wp-admin-al-front
  18. Para más información: Charla para traer el wp-admin al front

    https://speakerdeck.com/cesjam7/trayendo-el-wp-admin-al-front Realizada por un tal César Aquino Maximiliano.
  19. ¿Entonces usar o no usar $wpdb? - Plugins - Tablas

    propias - Velocidad - Grandes consultas