$30 off During Our Annual Pro Sale. View Details »

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)

    View Slide

  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

    View Slide

  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

    View Slide

  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" );
    }

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  11. ¿Y la seguridad?

    View Slide

  12. 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

    View Slide

  13. $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/

    View Slide

  14. $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

    View Slide

  15. $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

    View Slide

  16. $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

    View Slide

  17. Para mayor
    seguridad usen
    las funciones
    propias de
    WordPress

    View Slide

  18. Funciones propias de WordPress
    - WP_Query
    - wp_insert_post()
    - wp_update_post()
    - wp_delete_post()
    - add_post_meta()
    - update_post_meta()

    View Slide

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

    View Slide

  20. 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.

    View Slide

  21. ¿Entonces usar
    o no usar
    $wpdb?

    View Slide

  22. ¿Entonces usar
    o no usar
    $wpdb?
    - Plugins
    - Tablas propias
    - Velocidad
    - Grandes consultas

    View Slide

  23. wp_gracias()
    - cesaraquino.com.pe
    - twitter.com/cesjam7
    - github.com/cesjam7
    - speakerdeck.com/cesjam7
    - databomberos.com
    - orange612.com

    View Slide