Com consultas personalizadas você pode fazer qualquer leitura ou manipulação de dados que desejar. Isso abre um mundo de novas possibilidades.
Por que usar consultas personalizadas?
A funcionalidade básica do WordPress é boa na maioria das vezes, mas o que você faria se tivesse algumas necessidades específicas que ainda não foram atendidas pelos plugins existentes? Você está escrevendo seu próprio plugin? Então você deve aprender como usar consultas SQL no WordPress! As referências oficiais podem ser encontradas no WordPress Codex (Custom Queries e a classe WPDB).
o wpdb
Classe
o wpdb
A classe global do WordPress é a chave para usar consultas personalizadas. Na verdade, na hora de executar consultas, quase todas as APIs do WordPress, que precisam buscar dados do banco de dados, acabam usando essa classe em segundo plano. Para usar esta classe, você precisa usar o global $wpdb
variável, que é uma instanciação do wpdb
classe.
Nesta seção, discutiremos alguns métodos importantes do wpdb
classe. Usando esses métodos, você pode realizar todos os tipos de consultas personalizadas em seu projeto WordPress.
o query
método
o query
é usado para executar uma consulta usando a conexão de banco de dados ativa. O primeiro argumento do query
método é uma instrução SQL válida. O valor de retorno deste método é um número inteiro correspondente ao número de linhas afetadas/selecionadas ou false
quando há um erro.
Normalmente, você deseja usar esse método quando deseja recuperar uma contagem de registros. Vamos dar uma olhada no exemplo a seguir para entender como você pode usar esse método.
global $wpdb; $query = "SELECT COUNT(apple) FROM $wpdb->fruits"; $result = $wpdb->query($query);
Em primeiro lugar, declaramos o $wpdb
variável global para que possamos usar o wpdb
classe. Em seguida, preparamos a instrução SQL e a passamos como o primeiro argumento do query
método. o query
O método executaria a consulta e retornaria o número de linhas selecionadas ou afetadas.
o get_results
Método
o get_results
O método retorna todo o resultado da consulta, que é uma matriz. Cada elemento de uma matriz corresponde a uma linha do resultado.
Vamos dar uma olhada no exemplo a seguir.
global $wpdb; $query = $wpdb->prepare( "SELECT * FROM $wpdb->wp_terms wt INNER JOIN $wpdb->wp_term_taxonomy wtt ON wt.term_id = wtt.term_id WHERE wtt.taxonomy = %s AND wtt.count = %d", array( 'post_tag', 0 ) ); $results = $wpdb->get_results($query); if (is_array($results) && count($results)) { foreach ($results as $row) { echo $row['name']; } }
Em primeiro lugar, usamos o prepare
método para preparar a consulta SQL para execução segura. Discutiremos mais sobre declarações preparadas posteriormente neste artigo. Em seguida, passamos a consulta preparada no primeiro argumento do get_results
método. finalmente, o get_results
O método executa a consulta e retorna o resultado como uma matriz.
o get_var
Método
o get_var
é usado para retornar uma variável do banco de dados e o resultado completo da consulta é armazenado em cache para uso posterior. Ele retorna NULL
se não houver resultado.
Vamos dar uma olhada no exemplo a seguir para entender como ele funciona.
global $wpdb; $query = $wpdb->prepare( "SELECT wt.term_id, wt.name FROM $wpdb->wp_terms wt INNER JOIN $wpdb->wp_term_taxonomy wtt ON wt.term_id = wtt.term_id WHERE wtt.taxonomy = %s AND wtt.count = %d ORDER BY wtt.count DESC", array( 'post_tag', 0 ) ); $results = $wpdb->get_var($query, 1, 0);
o get_var
método recebe três argumentos.
- consulta: a consulta SQL que você deseja executar.
- coluna: o nome da coluna para recuperar dos resultados
- fileira: o número da linha específica que você deseja recuperar do conjunto de resultados.
No exemplo acima, tentamos recuperar o valor da name
coluna na primeira linha.
o get_row
Método
o get_row
é usado para recuperar uma única linha do banco de dados. Ele retorna NULL
quando não há resultado.
global $wpdb; $query = $wpdb->prepare( "SELECT * FROM wp_posts WHERE post_type = %s", 'post' ); $row = $wpdb->get_row($query, ARRAY_A, 3);
o get_row
método recebe três argumentos.
- consulta: a consulta SQL que você deseja executar.
- tipo de retorno: um de
OBJECT
,ARRAY_A
ouARRAY_N
que correspondem a umastdClass
objeto, uma matriz associativa ou uma matriz numérica. - fileira: o número da linha específica que você deseja recuperar do conjunto de resultados
No exemplo acima, tentamos recuperar a quarta linha do conjunto de resultados.
o get_col
Método
o get_col
é usado para recuperar a coluna específica do conjunto de resultados. Se o conjunto de resultados contiver apenas uma coluna, ela será retornada. Por outro lado, se o conjunto de resultados contiver mais de uma coluna, ele retornará a coluna específica conforme especificado no segundo argumento.
global $wpdb; $query = $wpdb->prepare( "SELECT * FROM wp_posts WHERE post_type = %s", 'post' ); $col = $wpdb->get_col($query, 3);
No exemplo acima, tentamos recuperar a quarta coluna do conjunto de resultados.
Consultas preparadas
De acordo com o manual do php.net:
“Elas [prepared queries] pode ser pensado como um tipo de modelo compilado para o SQL que um aplicativo deseja executar, que pode ser personalizado usando parâmetros variáveis.”
Uma instrução preparada é uma instrução SQL pré-compilada que pode ser executada várias vezes enviando apenas os dados para o servidor. Ele tem a vantagem adicional de tornar automaticamente os dados usados nos espaços reservados protegidos contra ataques de injeção de SQL. Você pode usar uma instrução preparada incluindo espaços reservados em seu SQL.
Em resumo, uma consulta deve ter escape de SQL antes de ser executada para evitar ataques de injeção. o wpdb
classe fornece a prepare
método que permite preparar a consulta SQL para execução segura. Nos exemplos que discutimos até agora, já usamos o prepare
antes de executarmos consultas SQL.
Vamos dar uma olhada rápida no exemplo a seguir em que os valores 10
, monkey
e apple
será escapado quando for realmente usado na consulta.
// Usage: $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] ); global $wpdb; $wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->test_table (post_id, animal, food) VALUES ( %d, %s, %s )", array( 10, 'monkey', 'apple' ) ));
Configurando mensagens de erro
Você pode ativar e desativar as mensagens de erro do banco de dados com o show_errors
e hide_errors
métodos.
global $wpdb; $wpdb->show_errors(); $wpdb->hide_errors();
Controle de cache
A liberação do cache de resultados da consulta pode ser feita com o flush
método.
global $wpdb; $wpdb->flush();
Inserindo dados
Você pode usar o insert
método para inserir uma linha na tabela MySQL.
global $wpdb; $wpdb->insert( $wpdb->foods, array( 'fruit' => 'apple', 'year' => 2012 ), array( '%s', '%d' ) );
o insert
método recebe três argumentos.
- tabela: O nome da mesa
- dados: os dados a serem inseridos (coluna => pares de valores) sem escapar
-
formato: uma matriz de formatos a serem mapeados para cada um dos valores em
$data
. Se você não passar nada, todos os valores serão tratados como strings
Atualizando dados
o update
é usado para atualizar uma linha na tabela MySQL.
global $wpdb; $wpdb->update( $wpdb->foods, array( 'fruit' => 'apple', // string 'year' => 'value2' // integer (number) ), array( 'ID' => 1 ), array( '%s', // value1 '%d' // value2 ), array( '%d' ) );
o update
método recebe cinco argumentos.
- tabela: O nome da mesa.
- dados: os dados a serem atualizados (pares de valor de coluna) sem escapar.
- Onde: onde condições na forma de matriz de pares de valores-chave.
-
formato: uma matriz de formatos a serem mapeados para cada um dos valores em
$data
. Se você não passar nada, todos os valores serão tratados como strings. -
formato onde: uma matriz de formatos a serem mapeados para cada um dos valores em
$where
. Se você não passar nada, todos os valores serão tratados como strings.
Informações da Coluna
o get_col_info
é usado para recuperar metadados de coluna da última consulta.
$wpdb->get_col_info('type', 1);
Vamos dar uma olhada nos parâmetros.
-
info_type: o tipo de metadados que você deseja recuperar. Você pode passar qualquer um destes:
'name'
,'table'
,'def'
,'max_length'
,'not_null'
,'primary_key'
,'multiple_key'
,'unique_key'
,'numeric'
,'blob'
,'type'
,'unsigned'
ou'zerofill'
. - col_offset: Especifique a coluna da qual recuperar informações.
Referenciando tabelas do WordPress
As tabelas de banco de dados do WordPress podem ser referenciadas no wpdb
classe. Isso é muito conveniente, pois os nomes das tabelas podem ser diferentes dos padrões. Aqui está uma lista de referências de tabelas de banco de dados do WordPress:
$wpdb->posts;
$wpdb->postmeta;
$wpdb->comments;
$wpdb->commentmeta;
$wpdb->terms;
$wpdb->term_taxonomy;
$wpdb->term_relationships;
$wpdb->users;
$wpdb->usermeta;
$wpdb->links;
$wpdb->options;
Observe que não precisamos incluir o prefixo, esse é o benefício aqui, pois o wpdb
classe cuida disso para nós.
Aí temos! Uma referência para consultas personalizadas no WordPress, tudo em um só lugar para você.
Este post foi atualizado com contribuições de Sajal Soni. Sajal pertence à Índia e adora passar o tempo criando sites baseados em estruturas de código aberto.