Preciso usar o wpdb prepare antes de wpdb-> insert?
Se estou inserindo valores em uma tabela wordpress usando wpdb-> insert, preciso "limpar" meus dados antes de inseri-los ou esse método (wpdb-> insert) faz isso por mim?
Preciso usar o wpdb prepare antes de wpdb-> insert?
Se estou inserindo valores em uma tabela wordpress usando wpdb-> insert, preciso "limpar" meus dados antes de inseri-los ou esse método (wpdb-> insert) faz isso por mim?
Respostas:
Não, você não deve preparar ou escapar dos dados; isso é feito pela wpdb
classe.
Na referência da classe wpdb :
dados :
(matriz) Dados a serem inseridos (na coluna => pares de valores). As colunas $ data e os valores $ data devem ser "brutos" (nenhum escape de SQL).
Se, no entanto, você estava escrevendo seu próprio SQL em vez de usar o insert
método, então sim, você deve escapar do uso prepare
.
A seguir, um aviso para a classe wpdb.
https://codex.wordpress.org/Class_Reference/wpdb
Um aviso
Algumas das funções nesta classe usam uma instrução SQL como entrada. Você deve escapar do SQL todos os valores não confiáveis que você incorporar na consulta SQL para impedir ataques de injeção de SQL. Verifique a documentação para ver se a função que você planeja usar escapa do SQL para você ou espera que ela seja pré-escapada.
Então, eu li isso como - a classe wpdb não prepara ou escapa automaticamente os dados para você.
Tenho certeza de que, se você não pode confiar 100% na fonte de dados em seu código, sugiro usar a classe de preparação (?).
Não pense que o uso da classe de preparação o consertará sem o uso adequado da classe de preparação. Eu sou bastante novo nisso, portanto, poste quaisquer correções como resposta, se não estiver certo.
$ wpdb-> prepare ("SELECT * FROM tabela WHERE ID =% d AND nome =% s", $ id, $ nome);
Na declaração acima, existem 2 atributos extras. Um para o ID e um para o nome. Tanto quanto eu li, cada um corresponde ao número de itens em sua consulta. Também% s = string,% d = inteiro e% f = flutuante.
Além disso, pela minha leitura, se você não colocar os atributos extras, o preparo não fará nada. Haverá um aviso, mas se você desligar, talvez não saiba.
Aqui está um exemplo da própria referência de classe em que eles adicionam uma classe de preparação a um INSERT abaixo.
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
$ wpdb-> query ($ wpdb-> prepare ("INSERIR EM $ wpdb-> postmeta (post_id, meta_key, meta_value) VALORES (% d,% s,% s)"), array (10, $ metakey, $ metavalue) ));
Minha preocupação é que a resposta votada esteja incorreta de acordo com a mesma página que 'ninguém' faz referência. Estou assumindo que você usa o prepare (), mas não outros métodos padrão de escape do php, porque eu tomei essa resposta tão correta também ... até que me aprofundou mais.
Enfim ... talvez as coisas tenham mudado desde a resposta original.
$wpdb->insert()
, $ wpdb-> update () `ou $wpdb->delete()
dados devem ser RAW. Em uma situação em que você usa, por exemplo, $wpdb->query()
e passa a instrução SQL como entrada, você deve escapar de dados não confiáveis.
Não, você não precisa evitar injeções de SQL ao usar - wpdb insert ou wpdb delete.
Veja os seguintes links:
https://codex.wordpress.org/Data_Validation#Database
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
insert
eupdate
não precisam disso. Mas deve ser usado comquery
.