Idiomas: Inglés * Italiano • 日本語 Русский • 中文(简)) • 中文(Add) • 한국어 * (Agregue su idioma)
Hablar con la base de datos: La Clase wpdb
WordPress define una clase llamada wpdb, que contiene un conjunto de funciones utilizadas para interactuar con una base de datos. Su propósito principal es proporcionar una interfaz con la base de datos de WordPress, pero se puede usar para comunicarse con cualquier otra base de datos apropiada. El código fuente de la clase se basa libremente en la clase ezSQL; escrito y mantenido por Justin Vincent
Usando el objeto
Advertencia: Los métodos de la clase wpdb()
no deben ser llamados directamente. Utilice el objeto global $wpdb
en su lugar!
WordPress proporciona una variable de objeto global, $wpdb
, que es una instanciación de la clase wpdb definida en / wp-includes / wp-db.php. De forma predeterminada, $wpdb
se crea una instancia para hablar con la base de datos de WordPress. Para acceder a $wpdb
en su código PHP de WordPress, declare $wpdb
como una variable global utilizando global keyword
, o utilice superglobal $GLOBALS
de la siguiente manera:
// 1st Method - Declaring $wpdb as global and using it to execute an SQL query statement that returns a PHP objectglobal $wpdb;$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );// 2nd Method - Utilizing the $GLOBALS superglobal. Does not require global keyword ( but may not be best practice )$results = $GLOBALS->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );
El objeto $wpdb
no se limita a las tablas predeterminadas creadas por WordPress; se puede usar para leer datos de cualquier tabla de la base de datos de WordPress (como tablas de complementos personalizadas). Por ejemplo, para SELECCIONAR información de una tabla personalizada llamada «mytable», puede hacer lo siguiente.
$myrows = $wpdb->get_results( "SELECT id, name FROM mytable" );
El objeto $wpdb
puede comunicarse con cualquier número de tablas, pero solo con una base de datos a la vez; de forma predeterminada, la base de datos de WordPress. En el raro caso de que necesite conectarse a otra base de datos, necesitará crear una instancia de su propio objeto de la clase wpdb
con su propia información de conexión a la base de datos. Para configuraciones extremadamente complicadas con muchas bases de datos, considere usar hyperdb en su lugar.
Una advertencia
Algunas de las funciones de esta clase toman una instrucción SQL como entrada. Debe escapar de SQL todos los valores no confiables que incorpore a la consulta SQL para evitar ataques de inyección SQL. Verifique la documentación para ver si la función que planea usar escapa de SQL por usted o espera que se escape previamente.
Para obtener más información sobre el escape de SQL en WordPress, consulte la sección titulada Proteger consultas contra ataques de inyección SQL a continuación.
SELECCIONE una variable
La función get_var
devuelve una sola variable de la base de datos. Aunque solo se devuelve una variable, el resultado completo de la consulta se almacena en caché para su uso posterior. Devuelve NULL si no se encuentra ningún resultado.
<?php $wpdb->get_var( 'query', column_offset, row_offset ); ?>
query (cadena) La consulta que desea ejecutar. Establecer este parámetro en null
devolverá la variable especificada de los resultados almacenados en caché de la consulta anterior. column_offset (integer) La columna deseada (0 es la primera). El valor predeterminado es 0. row_offset (integer) La fila deseada (0 es la primera). El valor predeterminado es 0.
Ejemplos
Recuperar y mostrar el número de usuarios.
<?php$user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users" );echo "<p>User count is {$user_count}</p>";?>
Recuperar y mostrar la suma de un valor de campo personalizado.
<?php// set the meta_key to the appropriate custom field meta key$meta_key = 'miles';$allmiles = $wpdb->get_var( $wpdb->prepare( "SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) );echo "<p>Total miles is {$allmiles}</p>";?>
SELECCIONE una fila
Para recuperar una fila completa de una consulta, use get_row
. La función puede devolver la fila como un objeto, una matriz asociativa o una matriz indexada numéricamente. Si la consulta devuelve más de una fila, la función devuelve solo la fila especificada, pero todas las filas se almacenan en caché para su uso posterior. Devuelve NULL si no se encuentra ningún resultado, tenga en cuenta esto cuando use el valor devuelto en argumentos, vea el ejemplo a continuación.
<?php $wpdb->get_row('query', output_type, row_offset); ?>
query (cadena) La consulta que desea ejecutar. output_type Una de las tres constantes predefinidas. El valor predeterminado es OBJETO.
- OBJECT – result se mostrará como un objeto.
- ARRAY_A-result se mostrará como una matriz asociativa.
- ARRAY_N-result se mostrará como una matriz indexada numéricamente.
row_offset (integer) La fila deseada (0 es la primera). El valor predeterminado es 0.
Ejemplos
Obtenga toda la información sobre el enlace 10.
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10" );
Las propiedades del objeto $mylink
son los nombres de columna del resultado de la consulta SQL (en este ejemplo, todas las columnas de la tabla $wpdb->links
, pero también puede consultar solo columnas específicas).
echo $mylink->link_id; // prints "10"
En contraste, usar
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A );
daría como resultado un array asociativo:
echo $mylink; // prints "10"
y
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N );
daría como resultado una matriz indexada numéricamente:
echo $mylink; // prints "10"
Si no hay registro con ID 10 en la tabla de enlaces, se devolverá null
. Lo siguiente sería entonces falso:
if ( null !== $mylink ) { // do something with the link return true;} else { // no link found return false;}
SELECCIONE una columna
Para SELECCIONAR una columna, utilice get_col
. Esta función genera una matriz unidimensional. Si la consulta devuelve más de una columna, la función solo devolverá la columna especificada, pero el resultado completo se almacenará en caché para su uso posterior. Devuelve un array vacío si no se encuentra ningún resultado.
<?php $wpdb->get_col( 'query', column_offset ); ?>
query (cadena) la consulta que desea ejecutar. Establecer este parámetro en null
devolverá la columna especificada de los resultados almacenados en caché de la consulta anterior. column_offset (integer) La columna deseada (0 es la primera). El valor predeterminado es 0.
Ejemplos
Para este ejemplo, supongamos que el blog está dedicado a información sobre automóviles. Cada publicación describe un automóvil en particular (por ejemplo, el Ford Mustang de 1969), y tres campos personalizados, fabricante, modelo y año, se asignan a cada publicación. En este ejemplo se mostrarán los títulos de las publicaciones, filtrados por un fabricante en particular (Ford) y ordenados por modelo y año.
La forma get_col de la clase wpdb se usa para devolver un array de todos los id de post que cumplen con los criterios y se ordenan en el orden correcto. A continuación, se utiliza una construcción foreach para iterar a través de esa matriz de id de publicación, mostrando el título de cada publicación. Tenga en cuenta que el SQL para este ejemplo fue creado por Andomar.
<?php $meta_key1= 'model';$meta_key2= 'year';$meta_key3= 'manufacturer';$meta_key3_value= 'Ford';$postids=$wpdb->get_col( $wpdb->prepare( "SELECT key3.post_idFROM $wpdb->postmeta key3INNER JOIN $wpdb->postmeta key1 ON key1.post_id = key3.post_id AND key1.meta_key = %s INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key3.post_id AND key2.meta_key = %sWHERE key3.meta_key = %s AND key3.meta_value = %sORDER BY key1.meta_value, key2.meta_value",$meta_key1, $meta_key2, $meta_key3, $meta_key3_value) ); if ( $postids ) {echo "List of {$meta_key3_value}(s), sorted by {$meta_key1}, {$meta_key2}";foreach ( $postids as $id ) { $post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php} }?>
Este ejemplo enumera todas las publicaciones que contienen un campo personalizado en particular, pero ordenadas por el valor de un segundo campo personalizado.
<?php// List all posts with custom field Color, sorted by the value of custom field Display_Order// does not exclude any 'post_type'// assumes each post has just one custom field for Color, and one for Display_Order$meta_key1 = 'Color';$meta_key2 = 'Display_Order';$postids = $wpdb->get_col( $wpdb->prepare( "SELECT key1.post_idFROM $wpdb->postmeta key1INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key1.post_id AND key2.meta_key = %sWHERE key1.meta_key = %sORDER BY key2.meta_value+(0) ASC", $meta_key2,$meta_key1) ); if ( $postids ) {echo "List of {$meta_key1} posts, sorted by {$meta_key2}";foreach ( $postids as $id ) {$post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php}}?>
SELECCIONE Resultados genéricos
Los resultados genéricos de varias filas se pueden extraer de la base de datos con get_results
. La función devuelve el resultado completo de la consulta como una matriz. Cada elemento de esta matriz corresponde a una fila del resultado de la consulta y, como get_row
, puede ser un objeto, una matriz asociativa o una matriz numerada. Si no se encuentran filas coincidentes, o si hay un error en la base de datos, el valor devuelto será una matriz vacía. Si su cadena query query está vacía, o pasa un invalid output_type no válido, se devolverá NULL.
<?php $wpdb->get_results( 'query', output_type ); ?>
query (cadena) La consulta que desea ejecutar. output_type Una de cuatro constantes predefinidas. El valor predeterminado es OBJETO. Consulte SELECCIONAR una fila y sus ejemplos para obtener más información.
- OBJECT – result se mostrará como una matriz indexada numéricamente de objetos de fila.
- OBJECT_K-result se mostrará como una matriz asociativa de objetos de fila, utilizando los valores de la primera columna como claves (los duplicados se descartarán).
- ARRAY_A-result se mostrará como una matriz indexada numéricamente de matrices asociativas, utilizando nombres de columna como claves.
- ARRAY_N-result se mostrará como una matriz indexada numéricamente de matrices indexadas numéricamente.
Dado que esta función utiliza la función query wpdb->query (), todas las variables de clase están configuradas correctamente. El recuento de resultados de una consulta ‘SELECT’ se almacenará en num wpdb->num_rows.
Ejemplos
Obtenga los ID y Títulos de todos los Borradores del Usuario 5 y haga eco de los Títulos.
$fivesdrafts = $wpdb->get_results( "SELECT ID, post_title FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");foreach ( $fivesdrafts as $fivesdraft ) {echo $fivesdraft->post_title;}
Obtenga toda la información sobre los Borradores por Usuario 5.
<?php$fivesdrafts = $wpdb->get_results( "SELECT * FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");if ( $fivesdrafts ){foreach ( $fivesdrafts as $post ){setup_postdata( $post );?><h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permalink: <?php the_title(); ?>"><?php the_title(); ?></a></h2><?php}}else{?><h2>Not Found</h2><?php}?>
INSERTAR fila
Insertar una fila en una tabla.
<?php $wpdb->insert( $table, $data, $format ); ?>
tabla (cadena) El nombre de la tabla en la que se insertarán los datos. datos (matriz) Datos a insertar(en la columna = > pares de valores). Tanto las columnas $data como los valores data data deben ser » raw » (ninguno de los dos debe tener escape SQL). format (array / string) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de $data. If string, ese formato se utilizará para todos los valores de $data. Si se omite, todos los valores de $data se tratarán como cadenas a menos que se especifique lo contrario en wpdb:: field field_types.
Posibles valores de formato: %s como cadena; %d como entero (número entero); y %f como flotador. (Vea más abajo para obtener más información.)
Después de insertar, se puede acceder al ID generado para la columna AUTO_INCREMENT con:
$wpdb->insert_id
Esta función devuelve false si la fila no se pudo insertar. De lo contrario, devuelve el número de filas afectadas (que siempre serán 1).
Nota: La porción de valor de la columna del parámetro de datos = > los pares de valores deben ser escalares. Si pasa un array (u objeto) como valor a insertar, generará una advertencia similar a «mysql_real_escape_string () espera que el parámetro 1 sea cadena, array dado en la línea 880 en el archivo /var/www/html/wp-includes/wp-db.php».
Ejemplos
Insertar dos columnas en una fila, el primer valor es una cadena y el segundo un número:
$wpdb->insert( 'table', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) );
REEMPLAZAR fila
Reemplazar una fila en una tabla si existe o insertar una nueva fila en una tabla si la fila no existía ya.
<?php $wpdb->replace( $table, $data, $format ); ?>
table (cadena) El nombre de la tabla en la que se reemplazarán los datos. datos (matriz) Datos a reemplazar(en la columna = > pares de valores). Tanto las columnas $data como los valores data data deben ser » raw » (ninguno de los dos debe tener escape SQL). format (array / string) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de $data. If string, ese formato se utilizará para todos los valores de $data. Si se omite, todos los valores de $data se tratarán como cadenas a menos que se especifique lo contrario en wpdb:: field field_types.
Posibles valores de formato: %s como cadena; %d como entero (número entero); y %f como flotador. (Vea más abajo para obtener más información.)
Si la longitud de un elemento de cadena en el parámetro array data array es mayor que la longitud definida en la tabla de base de datos MySQL, la inserción fallará, esta función devolverá false, pero $wpdb->last_error no se establecerá en un mensaje descriptivo. Debe asegurarse de que los datos que desea insertar encajen en la base de datos, no asuma que MySQL truncará los datos.
Después de reemplazar, se puede acceder al ID generado para la columna AUTO_INCREMENT con:
$wpdb->insert_id
Esta función devuelve un recuento para indicar el número de filas afectadas. Esta es la suma de las filas eliminadas e insertadas. Si el recuento es 1 para un REEMPLAZO de una sola fila, se insertó una fila y no se eliminaron filas. Si el recuento es mayor que 1, se eliminaron una o más filas antiguas antes de insertar la nueva fila. Es posible que una sola fila reemplace a más de una fila antigua si la tabla contiene varios índices únicos y la nueva fila duplica valores para diferentes filas antiguas en diferentes índices únicos.
Esta función devuelve false si no se pudo reemplazar una fila existente y no se pudo insertar una nueva fila.
Ejemplos
Reemplazar una fila, el primer valor es el id de fila, el segundo una cadena y el tercero un número:
$wpdb->replace( 'table', array( 'indexed_id' => 1,'column1' => 'value1', 'column2' => 123 ), array( '%d','%s', '%d' ) );
ACTUALIZAR filas
Actualizar una fila de la tabla. Devuelve false si hay errores, o el número de filas afectadas si tiene éxito.
<?php $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); ?>
table (cadena) El nombre de la tabla a actualizar. datos (array) Datos a actualizar(en columna = > pares de valores). Tanto las columnas $data como los valores data data deben ser » raw » (ninguno de los dos debe tener escape SQL). Esto significa que si está utilizando datos GET o POST, es posible que necesite usar stripslashes() para evitar que las barras terminen en la base de datos. where (array) Un array con nombre de cláusulas WHERE (en column => pares de valores). Múltiples cláusulas se unirán con ANDs. Tanto las columnas where where como los valores where where deben ser «crudos». format (array / string) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de $data. If string, ese formato se utilizará para todos los valores de $data. where_format (array / string) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de where where. If string, ese formato se utilizará para todos los elementos de where where.
Posibles valores de formato: %s como cadena; %d como entero (número entero) y %f como flotante. (Vea más abajo para obtener más información.) Si se omite, todos los valores en where where se tratarán como cadenas.
Valores de retorno: Esta función devuelve el número de filas actualizadas, o false si hay un error. Tenga en cuenta que si los datos matches coinciden con lo que ya está en la base de datos, no se actualizarán filas, por lo que se devolverá 0. Debido a esto, probablemente debería verificar la devolución con false = = = result result
Examples
Actualizar una fila, donde el ID es 1, el valor en la primera columna es una cadena y el valor en la segunda columna es un número:
$wpdb->update( 'table', array( 'column1' => 'value1',// string'column2' => 'value2'// integer (number) ), array( 'ID' => 1 ), array( '%s',// value1'%d'// value2), array( '%d' ) );
Atención: %d
no puede tratar con valores de coma – si no está usando números completos, use cadena / %s.
ELIMINAR filas
La función eliminar se agregó en WordPress 3.4.0 y se puede usar para eliminar filas de una tabla. El uso es muy similar a actualizar e insertar. Devuelve el número de filas actualizadas, o false en caso de error.
Uso
<?php $wpdb->delete( $table, $where, $where_format = null ); ?>
Parámetros
table tabla (cadena) (obligatorio) Nombre de la tabla. Predeterminado: None where where (array) (obligatorio) Un array con nombre de cláusulas WHERE (en la columna -> pares de valores). Múltiples cláusulas se unirán con ANDs. Tanto las columnas where where como los valores where where deben ser ‘crudos’. Predeterminado: None None where_format (cadena / matriz) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de $where. Si es una cadena, ese formato se utilizará para todos los elementos de where where. Un formato es uno de ‘%d’, ‘%f’, ‘% s’ (entero, flotante, cadena; vea más abajo para obtener más información). Si se omite, todos los valores en where where se tratarán como cadenas a menos que se especifique lo contrario en wpdb:: field tipos de campo. Predeterminado: null
Ejemplos
// Default usage.$wpdb->delete( 'table', array( 'ID' => 1 ) );// Using where formatting.$wpdb->delete( 'table', array( 'ID' => 1 ), array( '%d' ) );
Ejecución de consultas generales
La función query
le permite ejecutar cualquier consulta SQL en la base de datos de WordPress. Se utiliza mejor cuando se necesitan consultas SQL específicas, personalizadas o complejas. Para consultas más básicas, como seleccionar información de una tabla, consulte las otras funciones wpdb
anteriores, como get_results, get_var, get_row or get_col
.
Sintaxis general
<?php $wpdb->query('query'); ?>
query (cadena) La consulta SQL que desea ejecutar.
Esta función devuelve un valor entero que indica el número de filas afectadas / seleccionadas para SELECCIONAR, INSERTAR,ELIMINAR, ACTUALIZAR, etc. Para CREAR, ALTERAR, TRUNCAR y SOLTAR instrucciones SQL (que afectan a tablas enteras en lugar de filas específicas), esta función devuelve TRUE
si tiene éxito. Si se encuentra un error de MySQL, la función devolverá FALSE
. Tenga en cuenta que, dado que se pueden devolver 0 y FALSE
para consultas de fila, debe tener cuidado al verificar el valor devuelto. Utilice el operador de identidad ( = = = ) para comprobar si hay errores (por ejemplo, false = = = result result), y si alguna fila se vio afectada (por ejemplo, 0 = = = result result).
Ejemplos
Borre la meta clave y el valor de «gárgaras» de la publicación 13. (Agregaremos el método’ prepare ‘ para asegurarnos de que no estamos lidiando con una operación ilegal o con ningún personaje ilegal):
$wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", 13, 'gargle' ));
Realizado en WordPress por delete_post_meta()
.
Establezca el padre de la página 15 en la página 7.
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %dWHERE ID = %dAND post_status = %s", 7, 15, 'static') );
Proteger consultas contra ataques de inyección SQL
Para obtener una descripción más completa del escape SQL en WordPress, consulte Validación de datos de base de datos. Es una lectura obligada para todos los contribuyentes de código de WordPress y autores de complementos.
Todos los datos de las consultas SQL deben tener escape SQL antes de que se ejecute la consulta SQL para evitar ataques de inyección SQL. El método prepare
realiza esta funcionalidad para WordPress, que admite una sintaxis similar a sprintf () y similar a vsprintf ().
Nota: A partir de 3.5, wpdb::prepare() impone un mínimo de 2 argumentos.
<?php $sql = $wpdb->prepare( 'query' , value_parameter ); ?>
query (cadena) La consulta SQL que desea ejecutar, con marcadores de posición (ver más abajo). value_parameter (int|string|array) El valor a sustituir en el marcador de posición. Muchos valores se pueden pasar simplemente pasando más argumentos de una manera similar a sprintf (). Alternativamente, el segundo argumento puede ser una matriz que contenga los valores como en la función vsprintf() de PHP. Se debe tener cuidado de no permitir la entrada directa del usuario a este parámetro, lo que permitiría la manipulación de matrices de cualquier consulta con múltiples marcadores de posición. Los valores no se pueden escapar de SQL.
Marcadores de posición
El parámetro de consulta para prepare acepta marcadores de posición similares a sprintf (). Se admiten los formatos %s (cadena), %d (entero) y %f (flotante). (Los marcadores de posición %s y %d han estado disponibles desde que la función se agregó al núcleo en la versión 2.3, %f solo ha estado disponible desde la versión 3.3.) Cualquier otro carácter %
puede causar errores de análisis a menos que se escapen. Todos los caracteres %
dentro de literales de cadena SQL, incluidos comodines SIMILARES, deben tener un escape doble como %%
. Todos los %d, % f y %s deben dejarse sin entrecomillar en la cadena de consulta. Tenga en cuenta que el marcador de posición %d solo acepta enteros, por lo que no puede pasar números que tengan valores de coma a través de %d. Si necesita valores de coma, use %f como flotante en su lugar.
Ejemplos
Agregar Meta clave = > par de valores «Harriet’s Adages» = > » La interfaz de base de datos de WordPress es como el domingo por la mañana: Fácil.»al puesto 10.
$metakey= "Harriet's Adages";$metavalue= "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", 10, $metakey, $metavalue ) );
Realizado en WordPress por add_meta()
.
La misma consulta usando sintaxis similar a vsprintf ().
$metakey = "Harriet's Adages";$metavalue = "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", array(10, $metakey, $metavalue) ) );
Tenga en cuenta que en este ejemplo empaquetamos los valores juntos en una matriz. Esto puede ser útil cuando no sabemos el número de argumentos que necesitamos pasar hasta el tiempo de ejecución.
Tenga en cuenta que no tiene que preocuparse por citar cadenas. En lugar de pasar las variables directamente a la consulta SQL, use un marcador de posición %s
para cadenas, un marcador de posición %d
para enteros y un %f como marcador de posición para flotadores. Puede pasar tantos valores como desee, cada uno como un nuevo parámetro en el método prepare()
.
Mostrar y ocultar errores SQL
Puede activar y desactivar el eco de errores con show_errors
y hide_errors
, respectivamente.
<?php $wpdb->show_errors(); ?>
<?php $wpdb->hide_errors(); ?>
También puede imprimir el error (si lo hubiera) generado por la consulta más reciente con print_error
.
<?php $wpdb->print_error(); ?>
Nota: Si está ejecutando WordPress Multisitio, debe definir la constante DIEONDBERROR para que los errores de la base de datos se muestren de esta manera:
<?php define( 'DIEONDBERROR', true ); ?>
Obtener información de columna
Puede recuperar información sobre las columnas del resultado de consulta más reciente con get_col_info
. Esto puede ser útil cuando una función devuelve un OBJETO cuyas propiedades no conoce. La función generará la información deseada de la columna especificada, o una matriz con información sobre todas las columnas del resultado de la consulta si no se especifica ninguna columna.
<?php $wpdb->get_col_info('type', offset); ?>
escriba (cadena) La información que desea recuperar. Puede tomar cualquiera de los siguientes valores (lista tomada de los documentos ezSQL). El valor predeterminado es name.
- nombre-nombre de columna. Predeterminado.
- de tabla nombre de la tabla pertenece la columna
- max_length – longitud máxima de la columna
- not_null – 1 si la columna no puede ser NULL
- primary_key – 1 si la columna es una clave principal
- unique_key – 1 si la columna es una clave única
- multiple_key – 1 si la columna es una clave no única
- numérico – 1 si la columna es numérico
- blob – 1 si la columna es un BLOB
- tipo – el tipo de la columna
- unsigned – 1 si la columna es unsigned
- zerofill – 1 si la columna es cero lleno de
offset (entero) Especifica la columna de la que se va a recuperar la información (siendo 0 la primera columna). El valor predeterminado es -1.
- -1-Recuperar información de todas las columnas. Salida como matriz. Predeterminado.
- Entero no negativo: Recupera información de la columna especificada (0 es la primera).
Borrar la caché
Puede borrar la caché de resultados SQL con flush
.
<?php $wpdb->flush(); ?>
Esto borra $wpdb->last_result
, $wpdb->last_query
, y $wpdb->col_info
.
Variables de clase
show show_errors Si el eco de errores está activado o no. El valor predeterminado es TRUE. $num_queries El número de consultas que se han ejecutado. l last_query La consulta más reciente que se ha ejecutado. l last_error El texto de error más reciente generado por MySQL. queries consultas Puede guardar todas las consultas que se ejecutan en la base de datos y sus tiempos de parada estableciendo la constante SAVEQUERIES en TRUE (esta constante por defecto es FALSE). Si SAVEQUERIES es TRUE, sus consultas se almacenarán en esta variable como una matriz. l last_resultar Los resultados de consulta más recientes. col col_info La información de columna de los resultados de consulta más recientes. Consulte Obtener Información de Columna. ID insert_id ID generado para una columna AUTO_INCREMENT por la consulta de INSERCIÓN más reciente. $num_rows El número de filas devueltas por la última consulta. pref prefijo El prefijo de tabla de WordPress asignado para el sitio. bas base_prefix El prefijo original definido en wp-config.php. Para sitios múltiples: Úselo si desea obtener el prefijo sin el número de blog agregado.
Variables de varios sitios
Si está utilizando Varios sitios, también tiene acceso a lo siguiente:
blog blogid El id del sitio actual (blog). $siteid El id de la red actual (anteriormente «sitio»). WordPress actualmente solo admite una red por instalación de varios sitios, pero eso podría cambiar en el futuro. Consulta lo siguiente para obtener más información:
- WordPress: ¿diferencia entre site_id y blog_id?
- http://stackoverflow.com/a/4189358/1924128 – Otra buena respuesta a la misma pregunta.
Tablas
Las tablas de la base de datos de WordPress son fácilmente referenciadas en la clase wpdb
.
posts mensajes La tabla de mensajes. post postmeta La tabla de Contenido Meta (también conocida como Campos personalizados). comments comentarios La tabla de comentarios. comment commentmeta La tabla contiene información adicional sobre comentarios. ter termmeta La tabla termmeta contiene los valores meta de términos. terms términos La tabla de términos contiene la «descripción» de Categorías, Categorías de Enlaces, Etiquetas. term term_taxonomy La tabla term_taxonomy describe las diversas taxonomías (clases de términos). Las categorías, las Categorías de Enlaces y las etiquetas son taxonomías. term term_relationships La tabla de relaciones de términos contiene un enlace entre el término y el objeto que usa ese término, lo que significa que este archivo apunta a cada Categoría utilizada para cada publicación. users usuarios La tabla de Usuarios. us usermeta La tabla usermeta contiene información adicional del usuario, como apodos, descripciones y permisos. links enlaces La tabla de Enlaces. options opciones La tabla de opciones.
Tablas Multisitio
Estas tablas solo se utilizan en instalaciones multisitio.
blogs blogs La tabla Blogs contiene una lista de los blogs (sitios) separados que se han configurado dentro de la(s) red (es). sign inscripciones La tabla de inscripciones. site site La tabla Site contiene una lista de las redes (anteriormente conocidas como «sitios» en WPMU) que se configuran en la instalación (generalmente solo hay un sitio listado en esta tabla). sit sitemeta La tabla de opciones de red (Meta de sitio) contiene todas las opciones aplicables a toda la instalación de varios sitios. sit sitecategories La tabla de Categorías de sitios. table registration_log La tabla de Registro de Registro. table blog_versions La tabla de versiones de blog.
El archivo fuente
wpdb () se encuentra en wp-includes/wp-db.php
.
Relacionadas
- Función Miembro: wpdb:: esc_like() – instrucciones TIPO Escape antes de usar en SQL.
Artículos
- Artículo: El bucle – Una descripción básica de su uso de consultas dentro del bucle de WordPress.
- Artículo: Descripción general de consultas: Explicación de cómo determinar qué consultas generan WordPress.
- Artículo: Personalización de consultas a través de Gancho
- Artículo: Ver artículos Consulta MYSQL mediante personalización
- Artículo: Compilación de consultas avanzadas en Taxonomías
- Artículo: Compilación de consultas personalizadas mediante desplazamiento y paginación
Documentación de código
- Clase: WP_Query – Descripción detallada de la clase WP_Query
- Clase: WP_Comment_Query – Clase para consultas relacionadas con comentarios
- Clase: WP_User_Query-Clase para consultas relacionadas con el usuario
- Objeto: Overview wpdb – Descripción general del uso del objeto
- Function: set_query_var ()
- Function: get_query_var ()
- Function: query_posts() – Crear consultas personalizadas adicionales
- Function: get_post() – Tomar un ID de un elemento y devolver los registros en la base de datos para ese artículo
- Function: get_posts() – Una función especializada que devuelve una matriz de elementos
- Function: get_pages() – Una función especializada que devuelve una matriz de páginas
- Function: have_posts() – Una condición que determina si la consulta devolvió un artículo
- Función: the_post() – Se usa para establecer automáticamente el bucle después de una consulta
- Función: rewind_posts() – Borra el bucle actual
- Función: setup_postdata() – Establece los datos para un único resultado de consulta dentro de un bucle
- Función: wp_reset_postdata() – Restaura la consulta anterior (generalmente después de un bucle dentro de otro bucle)
- Función: wp_reset_query()
- Función: is_main_query() – Asegura que la consulta que se está cambiando sea solo la consulta principal
- Gancho de acción: pre_get_posts-Cambia las consultas de WordPress antes de que se ejecuten
- Gancho de acción: the_post-Modifica el objeto post después de la consulta
- Gancho de filtro: found_posts-Cambia el valor del objeto found_posts WP_Query
Advertencia: Los métodos de la clase wpdb()
no deben ser llamados directamente. Utilice el objeto global $wpdb
en su lugar!
WordPress proporciona una variable de objeto global, $wpdb
, que es una instanciación de la clase wpdb definida en / wp-includes / wp-db.php. De forma predeterminada, $wpdb
se crea una instancia para hablar con la base de datos de WordPress. Para acceder a $wpdb
en su código PHP de WordPress, declare $wpdb
como una variable global utilizando global keyword
, o utilice superglobal $GLOBALS
de la siguiente manera:
// 1st Method - Declaring $wpdb as global and using it to execute an SQL query statement that returns a PHP objectglobal $wpdb;$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );// 2nd Method - Utilizing the $GLOBALS superglobal. Does not require global keyword ( but may not be best practice )$results = $GLOBALS->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );
El objeto $wpdb
no se limita a las tablas predeterminadas creadas por WordPress; se puede usar para leer datos de cualquier tabla de la base de datos de WordPress (como tablas de complementos personalizadas). Por ejemplo, para SELECCIONAR información de una tabla personalizada llamada «mytable», puede hacer lo siguiente.
$myrows = $wpdb->get_results( "SELECT id, name FROM mytable" );
El objeto $wpdb
puede comunicarse con cualquier número de tablas, pero solo con una base de datos a la vez; de forma predeterminada, la base de datos de WordPress. En el raro caso de que necesite conectarse a otra base de datos, necesitará crear una instancia de su propio objeto de la clase wpdb
con su propia información de conexión a la base de datos. Para configuraciones extremadamente complicadas con muchas bases de datos, considere usar hyperdb en su lugar.
Una advertencia
Algunas de las funciones de esta clase toman una instrucción SQL como entrada. Debe escapar de SQL todos los valores no confiables que incorpore a la consulta SQL para evitar ataques de inyección SQL. Verifique la documentación para ver si la función que planea usar escapa de SQL por usted o espera que se escape previamente.
Para obtener más información sobre el escape de SQL en WordPress, consulte la sección titulada Proteger consultas contra ataques de inyección SQL a continuación.
SELECCIONE una variable
La función get_var
devuelve una sola variable de la base de datos. Aunque solo se devuelve una variable, el resultado completo de la consulta se almacena en caché para su uso posterior. Devuelve NULL si no se encuentra ningún resultado.
<?php $wpdb->get_var( 'query', column_offset, row_offset ); ?>
query (cadena) La consulta que desea ejecutar. Establecer este parámetro en null
devolverá la variable especificada de los resultados almacenados en caché de la consulta anterior. column_offset (integer) La columna deseada (0 es la primera). El valor predeterminado es 0. row_offset (integer) La fila deseada (0 es la primera). El valor predeterminado es 0.
Ejemplos
Recuperar y mostrar el número de usuarios.
<?php$user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users" );echo "<p>User count is {$user_count}</p>";?>
Recuperar y mostrar la suma de un valor de campo personalizado.
<?php// set the meta_key to the appropriate custom field meta key$meta_key = 'miles';$allmiles = $wpdb->get_var( $wpdb->prepare( "SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) );echo "<p>Total miles is {$allmiles}</p>";?>
SELECCIONE una fila
Para recuperar una fila completa de una consulta, use get_row
. La función puede devolver la fila como un objeto, una matriz asociativa o una matriz indexada numéricamente. Si la consulta devuelve más de una fila, la función devuelve solo la fila especificada, pero todas las filas se almacenan en caché para su uso posterior. Devuelve NULL si no se encuentra ningún resultado, tenga en cuenta esto cuando use el valor devuelto en argumentos, vea el ejemplo a continuación.
<?php $wpdb->get_row('query', output_type, row_offset); ?>
query (cadena) La consulta que desea ejecutar. output_type Una de las tres constantes predefinidas. El valor predeterminado es OBJETO.
- OBJECT – result se mostrará como un objeto.
- ARRAY_A-result se mostrará como una matriz asociativa.
- ARRAY_N-result se mostrará como una matriz indexada numéricamente.
row_offset (integer) La fila deseada (0 es la primera). El valor predeterminado es 0.
Ejemplos
Obtenga toda la información sobre el enlace 10.
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10" );
Las propiedades del objeto $mylink
son los nombres de columna del resultado de la consulta SQL (en este ejemplo, todas las columnas de la tabla $wpdb->links
, pero también puede consultar solo columnas específicas).
echo $mylink->link_id; // prints "10"
En contraste, usar
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A );
daría como resultado un array asociativo:
echo $mylink; // prints "10"
y
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N );
daría como resultado una matriz indexada numéricamente:
echo $mylink; // prints "10"
Si no hay registro con ID 10 en la tabla de enlaces, se devolverá null
. Lo siguiente sería entonces falso:
if ( null !== $mylink ) { // do something with the link return true;} else { // no link found return false;}
SELECCIONE una columna
Para SELECCIONAR una columna, utilice get_col
. Esta función genera una matriz unidimensional. Si la consulta devuelve más de una columna, la función solo devolverá la columna especificada, pero el resultado completo se almacenará en caché para su uso posterior. Devuelve un array vacío si no se encuentra ningún resultado.
<?php $wpdb->get_col( 'query', column_offset ); ?>
query (cadena) la consulta que desea ejecutar. Establecer este parámetro en null
devolverá la columna especificada de los resultados almacenados en caché de la consulta anterior. column_offset (integer) La columna deseada (0 es la primera). El valor predeterminado es 0.
Ejemplos
Para este ejemplo, supongamos que el blog está dedicado a información sobre automóviles. Cada publicación describe un automóvil en particular (por ejemplo, el Ford Mustang de 1969), y tres campos personalizados, fabricante, modelo y año, se asignan a cada publicación. En este ejemplo se mostrarán los títulos de las publicaciones, filtrados por un fabricante en particular (Ford) y ordenados por modelo y año.
La forma get_col de la clase wpdb se usa para devolver un array de todos los id de post que cumplen con los criterios y se ordenan en el orden correcto. A continuación, se utiliza una construcción foreach para iterar a través de esa matriz de id de publicación, mostrando el título de cada publicación. Tenga en cuenta que el SQL para este ejemplo fue creado por Andomar.
<?php $meta_key1= 'model';$meta_key2= 'year';$meta_key3= 'manufacturer';$meta_key3_value= 'Ford';$postids=$wpdb->get_col( $wpdb->prepare( "SELECT key3.post_idFROM $wpdb->postmeta key3INNER JOIN $wpdb->postmeta key1 ON key1.post_id = key3.post_id AND key1.meta_key = %s INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key3.post_id AND key2.meta_key = %sWHERE key3.meta_key = %s AND key3.meta_value = %sORDER BY key1.meta_value, key2.meta_value",$meta_key1, $meta_key2, $meta_key3, $meta_key3_value) ); if ( $postids ) {echo "List of {$meta_key3_value}(s), sorted by {$meta_key1}, {$meta_key2}";foreach ( $postids as $id ) { $post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php} }?>
Este ejemplo enumera todas las publicaciones que contienen un campo personalizado en particular, pero ordenadas por el valor de un segundo campo personalizado.
<?php// List all posts with custom field Color, sorted by the value of custom field Display_Order// does not exclude any 'post_type'// assumes each post has just one custom field for Color, and one for Display_Order$meta_key1 = 'Color';$meta_key2 = 'Display_Order';$postids = $wpdb->get_col( $wpdb->prepare( "SELECT key1.post_idFROM $wpdb->postmeta key1INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key1.post_id AND key2.meta_key = %sWHERE key1.meta_key = %sORDER BY key2.meta_value+(0) ASC", $meta_key2,$meta_key1) ); if ( $postids ) {echo "List of {$meta_key1} posts, sorted by {$meta_key2}";foreach ( $postids as $id ) {$post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php}}?>
SELECCIONE Resultados genéricos
Los resultados genéricos de varias filas se pueden extraer de la base de datos con get_results
. La función devuelve el resultado completo de la consulta como una matriz. Cada elemento de esta matriz corresponde a una fila del resultado de la consulta y, como get_row
, puede ser un objeto, una matriz asociativa o una matriz numerada. Si no se encuentran filas coincidentes, o si hay un error en la base de datos, el valor devuelto será una matriz vacía. Si su cadena query query está vacía, o pasa un invalid output_type no válido, se devolverá NULL.
<?php $wpdb->get_results( 'query', output_type ); ?>
query (cadena) La consulta que desea ejecutar. output_type Una de cuatro constantes predefinidas. El valor predeterminado es OBJETO. Consulte SELECCIONAR una fila y sus ejemplos para obtener más información.
- OBJECT – result se mostrará como una matriz indexada numéricamente de objetos de fila.
- OBJECT_K-result se mostrará como una matriz asociativa de objetos de fila, utilizando los valores de la primera columna como claves (los duplicados se descartarán).
- ARRAY_A-result se mostrará como una matriz indexada numéricamente de matrices asociativas, utilizando nombres de columna como claves.
- ARRAY_N-result se mostrará como una matriz indexada numéricamente de matrices indexadas numéricamente.
Dado que esta función utiliza la función query wpdb->query (), todas las variables de clase están configuradas correctamente. El recuento de resultados de una consulta ‘SELECT’ se almacenará en num wpdb->num_rows.
Ejemplos
Obtenga los ID y Títulos de todos los Borradores del Usuario 5 y haga eco de los Títulos.
$fivesdrafts = $wpdb->get_results( "SELECT ID, post_title FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");foreach ( $fivesdrafts as $fivesdraft ) {echo $fivesdraft->post_title;}
Obtenga toda la información sobre los Borradores por Usuario 5.
<?php$fivesdrafts = $wpdb->get_results( "SELECT * FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");if ( $fivesdrafts ){foreach ( $fivesdrafts as $post ){setup_postdata( $post );?><h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permalink: <?php the_title(); ?>"><?php the_title(); ?></a></h2><?php}}else{?><h2>Not Found</h2><?php}?>
INSERTAR fila
Insertar una fila en una tabla.
<?php $wpdb->insert( $table, $data, $format ); ?>
tabla (cadena) El nombre de la tabla en la que se insertarán los datos. datos (matriz) Datos a insertar(en la columna = > pares de valores). Tanto las columnas $data como los valores data data deben ser » raw » (ninguno de los dos debe tener escape SQL). format (array / string) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de $data. If string, ese formato se utilizará para todos los valores de $data. Si se omite, todos los valores de $data se tratarán como cadenas a menos que se especifique lo contrario en wpdb:: field field_types.
Posibles valores de formato: %s como cadena; %d como entero (número entero); y %f como flotador. (Vea más abajo para obtener más información.)
Después de insertar, se puede acceder al ID generado para la columna AUTO_INCREMENT con:
$wpdb->insert_id
Esta función devuelve false si la fila no se pudo insertar. De lo contrario, devuelve el número de filas afectadas (que siempre serán 1).
Nota: La porción de valor de la columna del parámetro de datos = > los pares de valores deben ser escalares. Si pasa un array (u objeto) como valor a insertar, generará una advertencia similar a «mysql_real_escape_string () espera que el parámetro 1 sea cadena, array dado en la línea 880 en el archivo /var/www/html/wp-includes/wp-db.php».
Ejemplos
Insertar dos columnas en una fila, el primer valor es una cadena y el segundo un número:
$wpdb->insert( 'table', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) );
REEMPLAZAR fila
Reemplazar una fila en una tabla si existe o insertar una nueva fila en una tabla si la fila no existía ya.
<?php $wpdb->replace( $table, $data, $format ); ?>
table (cadena) El nombre de la tabla en la que se reemplazarán los datos. datos (matriz) Datos a reemplazar(en la columna = > pares de valores). Tanto las columnas $data como los valores data data deben ser » raw » (ninguno de los dos debe tener escape SQL). format (array / string) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de $data. If string, ese formato se utilizará para todos los valores de $data. Si se omite, todos los valores de $data se tratarán como cadenas a menos que se especifique lo contrario en wpdb:: field field_types.
Posibles valores de formato: %s como cadena; %d como entero (número entero); y %f como flotador. (Vea más abajo para obtener más información.)
Si la longitud de un elemento de cadena en el parámetro array data array es mayor que la longitud definida en la tabla de base de datos MySQL, la inserción fallará, esta función devolverá false, pero $wpdb->last_error no se establecerá en un mensaje descriptivo. Debe asegurarse de que los datos que desea insertar encajen en la base de datos, no asuma que MySQL truncará los datos.
Después de reemplazar, se puede acceder al ID generado para la columna AUTO_INCREMENT con:
$wpdb->insert_id
Esta función devuelve un recuento para indicar el número de filas afectadas. Esta es la suma de las filas eliminadas e insertadas. Si el recuento es 1 para un REEMPLAZO de una sola fila, se insertó una fila y no se eliminaron filas. Si el recuento es mayor que 1, se eliminaron una o más filas antiguas antes de insertar la nueva fila. Es posible que una sola fila reemplace a más de una fila antigua si la tabla contiene varios índices únicos y la nueva fila duplica valores para diferentes filas antiguas en diferentes índices únicos.
Esta función devuelve false si no se pudo reemplazar una fila existente y no se pudo insertar una nueva fila.
Ejemplos
Reemplazar una fila, el primer valor es el id de fila, el segundo una cadena y el tercero un número:
$wpdb->replace( 'table', array( 'indexed_id' => 1,'column1' => 'value1', 'column2' => 123 ), array( '%d','%s', '%d' ) );
ACTUALIZAR filas
Actualizar una fila de la tabla. Devuelve false si hay errores, o el número de filas afectadas si tiene éxito.
<?php $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); ?>
table (cadena) El nombre de la tabla a actualizar. datos (array) Datos a actualizar(en columna = > pares de valores). Tanto las columnas $data como los valores data data deben ser » raw » (ninguno de los dos debe tener escape SQL). Esto significa que si está utilizando datos GET o POST, es posible que necesite usar stripslashes() para evitar que las barras terminen en la base de datos. where (array) Un array con nombre de cláusulas WHERE (en column => pares de valores). Múltiples cláusulas se unirán con ANDs. Tanto las columnas where where como los valores where where deben ser «crudos». format (array / string) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de $data. If string, ese formato se utilizará para todos los valores de $data. where_format (array / string) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de where where. If string, ese formato se utilizará para todos los elementos de where where.
Posibles valores de formato: %s como cadena; %d como entero (número entero) y %f como flotante. (Vea más abajo para obtener más información.) Si se omite, todos los valores en where where se tratarán como cadenas.
Valores de retorno: Esta función devuelve el número de filas actualizadas, o false si hay un error. Tenga en cuenta que si los datos matches coinciden con lo que ya está en la base de datos, no se actualizarán filas, por lo que se devolverá 0. Debido a esto, probablemente debería verificar la devolución con false = = = result result
Examples
Actualizar una fila, donde el ID es 1, el valor en la primera columna es una cadena y el valor en la segunda columna es un número:
$wpdb->update( 'table', array( 'column1' => 'value1',// string'column2' => 'value2'// integer (number) ), array( 'ID' => 1 ), array( '%s',// value1'%d'// value2), array( '%d' ) );
Atención: %d
no puede tratar con valores de coma – si no está usando números completos, use cadena / %s.
ELIMINAR filas
La función eliminar se agregó en WordPress 3.4.0 y se puede usar para eliminar filas de una tabla. El uso es muy similar a actualizar e insertar. Devuelve el número de filas actualizadas, o false en caso de error.
Uso
<?php $wpdb->delete( $table, $where, $where_format = null ); ?>
Parámetros
table tabla (cadena) (obligatorio) Nombre de la tabla. Predeterminado: None where where (array) (obligatorio) Un array con nombre de cláusulas WHERE (en la columna -> pares de valores). Múltiples cláusulas se unirán con ANDs. Tanto las columnas where where como los valores where where deben ser ‘crudos’. Predeterminado: None None where_format (cadena / matriz) (opcional) Una matriz de formatos que se asignarán a cada uno de los valores de $where. Si es una cadena, ese formato se utilizará para todos los elementos de where where. Un formato es uno de ‘%d’, ‘%f’, ‘% s’ (entero, flotante, cadena; vea más abajo para obtener más información). Si se omite, todos los valores en where where se tratarán como cadenas a menos que se especifique lo contrario en wpdb:: field tipos de campo. Predeterminado: null
Ejemplos
// Default usage.$wpdb->delete( 'table', array( 'ID' => 1 ) );// Using where formatting.$wpdb->delete( 'table', array( 'ID' => 1 ), array( '%d' ) );
Ejecución de consultas generales
La función query
le permite ejecutar cualquier consulta SQL en la base de datos de WordPress. Se utiliza mejor cuando se necesitan consultas SQL específicas, personalizadas o complejas. Para consultas más básicas, como seleccionar información de una tabla, consulte las otras funciones wpdb
anteriores, como get_results, get_var, get_row or get_col
.
Sintaxis general
<?php $wpdb->query('query'); ?>
query (cadena) La consulta SQL que desea ejecutar.
Esta función devuelve un valor entero que indica el número de filas afectadas / seleccionadas para SELECCIONAR, INSERTAR,ELIMINAR, ACTUALIZAR, etc. Para CREAR, ALTERAR, TRUNCAR y SOLTAR instrucciones SQL (que afectan a tablas enteras en lugar de filas específicas), esta función devuelve TRUE
si tiene éxito. Si se encuentra un error de MySQL, la función devolverá FALSE
. Tenga en cuenta que, dado que se pueden devolver 0 y FALSE
para consultas de fila, debe tener cuidado al verificar el valor devuelto. Utilice el operador de identidad ( = = = ) para comprobar si hay errores (por ejemplo, false = = = result result), y si alguna fila se vio afectada (por ejemplo, 0 = = = result result).
Ejemplos
Borre la meta clave y el valor de «gárgaras» de la publicación 13. (Agregaremos el método’ prepare ‘ para asegurarnos de que no estamos lidiando con una operación ilegal o con ningún personaje ilegal):
$wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", 13, 'gargle' ));
Realizado en WordPress por delete_post_meta()
.
Establezca el padre de la página 15 en la página 7.
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %dWHERE ID = %dAND post_status = %s", 7, 15, 'static') );
Proteger consultas contra ataques de inyección SQL
Para obtener una descripción más completa del escape SQL en WordPress, consulte Validación de datos de base de datos. Es una lectura obligada para todos los contribuyentes de código de WordPress y autores de complementos.
Todos los datos de las consultas SQL deben tener escape SQL antes de que se ejecute la consulta SQL para evitar ataques de inyección SQL. El método prepare
realiza esta funcionalidad para WordPress, que admite una sintaxis similar a sprintf () y similar a vsprintf ().
Nota: A partir de 3.5, wpdb::prepare() impone un mínimo de 2 argumentos.
<?php $sql = $wpdb->prepare( 'query' , value_parameter ); ?>
query (cadena) La consulta SQL que desea ejecutar, con marcadores de posición (ver más abajo). value_parameter (int|string|array) El valor a sustituir en el marcador de posición. Muchos valores se pueden pasar simplemente pasando más argumentos de una manera similar a sprintf (). Alternativamente, el segundo argumento puede ser una matriz que contenga los valores como en la función vsprintf() de PHP. Se debe tener cuidado de no permitir la entrada directa del usuario a este parámetro, lo que permitiría la manipulación de matrices de cualquier consulta con múltiples marcadores de posición. Los valores no se pueden escapar de SQL.
Marcadores de posición
El parámetro de consulta para prepare acepta marcadores de posición similares a sprintf (). Se admiten los formatos %s (cadena), %d (entero) y %f (flotante). (Los marcadores de posición %s y %d han estado disponibles desde que la función se agregó al núcleo en la versión 2.3, %f solo ha estado disponible desde la versión 3.3.) Cualquier otro carácter %
puede causar errores de análisis a menos que se escapen. Todos los caracteres %
dentro de literales de cadena SQL, incluidos comodines SIMILARES, deben tener un escape doble como %%
. Todos los %d, % f y %s deben dejarse sin entrecomillar en la cadena de consulta. Tenga en cuenta que el marcador de posición %d solo acepta enteros, por lo que no puede pasar números que tengan valores de coma a través de %d. Si necesita valores de coma, use %f como flotante en su lugar.
Ejemplos
Agregar Meta clave = > par de valores «Harriet’s Adages» = > » La interfaz de base de datos de WordPress es como el domingo por la mañana: Fácil.»al puesto 10.
$metakey= "Harriet's Adages";$metavalue= "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", 10, $metakey, $metavalue ) );
Realizado en WordPress por add_meta()
.
La misma consulta usando sintaxis similar a vsprintf ().
$metakey = "Harriet's Adages";$metavalue = "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", array(10, $metakey, $metavalue) ) );
Tenga en cuenta que en este ejemplo empaquetamos los valores juntos en una matriz. Esto puede ser útil cuando no sabemos el número de argumentos que necesitamos pasar hasta el tiempo de ejecución.
Tenga en cuenta que no tiene que preocuparse por citar cadenas. En lugar de pasar las variables directamente a la consulta SQL, use un marcador de posición %s
para cadenas, un marcador de posición %d
para enteros y un %f como marcador de posición para flotadores. Puede pasar tantos valores como desee, cada uno como un nuevo parámetro en el método prepare()
.
Mostrar y ocultar errores SQL
Puede activar y desactivar el eco de errores con show_errors
y hide_errors
, respectivamente.
<?php $wpdb->show_errors(); ?>
<?php $wpdb->hide_errors(); ?>
También puede imprimir el error (si lo hubiera) generado por la consulta más reciente con print_error
.
<?php $wpdb->print_error(); ?>
Nota: Si está ejecutando WordPress Multisitio, debe definir la constante DIEONDBERROR para que los errores de la base de datos se muestren de esta manera: <?php define( 'DIEONDBERROR', true ); ?>
Obtener información de columna
Puede recuperar información sobre las columnas del resultado de consulta más reciente con get_col_info
. Esto puede ser útil cuando una función devuelve un OBJETO cuyas propiedades no conoce. La función generará la información deseada de la columna especificada, o una matriz con información sobre todas las columnas del resultado de la consulta si no se especifica ninguna columna.
<?php $wpdb->get_col_info('type', offset); ?>
escriba (cadena) La información que desea recuperar. Puede tomar cualquiera de los siguientes valores (lista tomada de los documentos ezSQL). El valor predeterminado es name.
- nombre-nombre de columna. Predeterminado.
- de tabla nombre de la tabla pertenece la columna
- max_length – longitud máxima de la columna
- not_null – 1 si la columna no puede ser NULL
- primary_key – 1 si la columna es una clave principal
- unique_key – 1 si la columna es una clave única
- multiple_key – 1 si la columna es una clave no única
- numérico – 1 si la columna es numérico
- blob – 1 si la columna es un BLOB
- tipo – el tipo de la columna
- unsigned – 1 si la columna es unsigned
- zerofill – 1 si la columna es cero lleno de
offset (entero) Especifica la columna de la que se va a recuperar la información (siendo 0 la primera columna). El valor predeterminado es -1.
- -1-Recuperar información de todas las columnas. Salida como matriz. Predeterminado.
- Entero no negativo: Recupera información de la columna especificada (0 es la primera).
Borrar la caché
Puede borrar la caché de resultados SQL con flush
.
<?php $wpdb->flush(); ?>
Esto borra $wpdb->last_result
, $wpdb->last_query
, y $wpdb->col_info
.
Variables de clase
show show_errors Si el eco de errores está activado o no. El valor predeterminado es TRUE. $num_queries El número de consultas que se han ejecutado. l last_query La consulta más reciente que se ha ejecutado. l last_error El texto de error más reciente generado por MySQL. queries consultas Puede guardar todas las consultas que se ejecutan en la base de datos y sus tiempos de parada estableciendo la constante SAVEQUERIES en TRUE (esta constante por defecto es FALSE). Si SAVEQUERIES es TRUE, sus consultas se almacenarán en esta variable como una matriz. l last_resultar Los resultados de consulta más recientes. col col_info La información de columna de los resultados de consulta más recientes. Consulte Obtener Información de Columna. ID insert_id ID generado para una columna AUTO_INCREMENT por la consulta de INSERCIÓN más reciente. $num_rows El número de filas devueltas por la última consulta. pref prefijo El prefijo de tabla de WordPress asignado para el sitio. bas base_prefix El prefijo original definido en wp-config.php. Para sitios múltiples: Úselo si desea obtener el prefijo sin el número de blog agregado.
Variables de varios sitios
Si está utilizando Varios sitios, también tiene acceso a lo siguiente:
blog blogid El id del sitio actual (blog). $siteid El id de la red actual (anteriormente «sitio»). WordPress actualmente solo admite una red por instalación de varios sitios, pero eso podría cambiar en el futuro. Consulta lo siguiente para obtener más información:
- WordPress: ¿diferencia entre site_id y blog_id?
- http://stackoverflow.com/a/4189358/1924128 – Otra buena respuesta a la misma pregunta.
Tablas
Las tablas de la base de datos de WordPress son fácilmente referenciadas en la clase wpdb
.
posts mensajes La tabla de mensajes. post postmeta La tabla de Contenido Meta (también conocida como Campos personalizados). comments comentarios La tabla de comentarios. comment commentmeta La tabla contiene información adicional sobre comentarios. ter termmeta La tabla termmeta contiene los valores meta de términos. terms términos La tabla de términos contiene la «descripción» de Categorías, Categorías de Enlaces, Etiquetas. term term_taxonomy La tabla term_taxonomy describe las diversas taxonomías (clases de términos). Las categorías, las Categorías de Enlaces y las etiquetas son taxonomías. term term_relationships La tabla de relaciones de términos contiene un enlace entre el término y el objeto que usa ese término, lo que significa que este archivo apunta a cada Categoría utilizada para cada publicación. users usuarios La tabla de Usuarios. us usermeta La tabla usermeta contiene información adicional del usuario, como apodos, descripciones y permisos. links enlaces La tabla de Enlaces. options opciones La tabla de opciones.
Tablas Multisitio
Estas tablas solo se utilizan en instalaciones multisitio.
blogs blogs La tabla Blogs contiene una lista de los blogs (sitios) separados que se han configurado dentro de la(s) red (es). sign inscripciones La tabla de inscripciones. site site La tabla Site contiene una lista de las redes (anteriormente conocidas como «sitios» en WPMU) que se configuran en la instalación (generalmente solo hay un sitio listado en esta tabla). sit sitemeta La tabla de opciones de red (Meta de sitio) contiene todas las opciones aplicables a toda la instalación de varios sitios. sit sitecategories La tabla de Categorías de sitios. table registration_log La tabla de Registro de Registro. table blog_versions La tabla de versiones de blog.
El archivo fuente
wpdb () se encuentra en wp-includes/wp-db.php
.
Relacionadas
- Función Miembro: wpdb:: esc_like() – instrucciones TIPO Escape antes de usar en SQL.
Artículos
- Artículo: El bucle – Una descripción básica de su uso de consultas dentro del bucle de WordPress.
- Artículo: Descripción general de consultas: Explicación de cómo determinar qué consultas generan WordPress.
- Artículo: Personalización de consultas a través de Gancho
- Artículo: Ver artículos Consulta MYSQL mediante personalización
- Artículo: Compilación de consultas avanzadas en Taxonomías
- Artículo: Compilación de consultas personalizadas mediante desplazamiento y paginación
Documentación de código
- Clase: WP_Query – Descripción detallada de la clase WP_Query
- Clase: WP_Comment_Query – Clase para consultas relacionadas con comentarios
- Clase: WP_User_Query-Clase para consultas relacionadas con el usuario
- Objeto: Overview wpdb – Descripción general del uso del objeto
- Function: set_query_var ()
- Function: get_query_var ()
- Function: query_posts() – Crear consultas personalizadas adicionales
- Function: get_post() – Tomar un ID de un elemento y devolver los registros en la base de datos para ese artículo
- Function: get_posts() – Una función especializada que devuelve una matriz de elementos
- Function: get_pages() – Una función especializada que devuelve una matriz de páginas
- Function: have_posts() – Una condición que determina si la consulta devolvió un artículo
- Función: the_post() – Se usa para establecer automáticamente el bucle después de una consulta
- Función: rewind_posts() – Borra el bucle actual
- Función: setup_postdata() – Establece los datos para un único resultado de consulta dentro de un bucle
- Función: wp_reset_postdata() – Restaura la consulta anterior (generalmente después de un bucle dentro de otro bucle)
- Función: wp_reset_query()
- Función: is_main_query() – Asegura que la consulta que se está cambiando sea solo la consulta principal
- Gancho de acción: pre_get_posts-Cambia las consultas de WordPress antes de que se ejecuten
- Gancho de acción: the_post-Modifica el objeto post después de la consulta
- Gancho de filtro: found_posts-Cambia el valor del objeto found_posts WP_Query