Slide 1

Slide 1 text

WordPress y la Base de Datos Meetup WPLima - Abril 2017 César J. Aquino Maximiliano (@cesjam7)

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

$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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

$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

Slide 8

Slide 8 text

$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

Slide 9

Slide 9 text

$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

Slide 10

Slide 10 text

$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

Slide 11

Slide 11 text

¿Y la seguridad?

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

$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

Slide 15

Slide 15 text

$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

Slide 16

Slide 16 text

$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

Slide 17

Slide 17 text

Para mayor seguridad usen las funciones propias de WordPress

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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.

Slide 21

Slide 21 text

¿Entonces usar o no usar $wpdb?

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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