¿Debo usar wpdb prepare antes de wpdb- > insertar?
Si inserto valores en una tabla de wordpress usando wpdb- > insert, ¿necesito "limpiar" mis datos antes de insertarlos o este método (wpdb- > insert) lo hace por mí?
¿Debo usar wpdb prepare antes de wpdb- > insertar?
Si inserto valores en una tabla de wordpress usando wpdb- > insert, ¿necesito "limpiar" mis datos antes de insertarlos o este método (wpdb- > insert) lo hace por mí?
No, no debes preparar o escapar los datos, esto se hace por ti con la clase wpdb
.
De la referencia de clase wpdb :
datos :
(matriz) Datos para insertar (en la columna = > pares de valores). Tanto las columnas de $ data como los valores de $ data deben ser "en bruto" (ninguno de ellos debe ser escapado de SQL).
Sin embargo, si estuviera escribiendo su propio SQL en lugar de usar el método insert
, entonces sí, debería escapar usando prepare
.
La siguiente es una advertencia para la clase wpdb.
Una advertencia
Algunas de las funciones en esta clase toman una declaración SQL como entrada. Debe SQL escapar de todos los valores no confiables que incorpora en el SQL Consulta para evitar ataques de inyección SQL. Revisa la documentación para ver Si la función que planea usar escapa a SQL por usted o espera que lo haga ser pre-escapado.
Entonces leí esto como: la clase wpdb no prepara o escapa automáticamente los datos por ti.
Estoy bastante seguro de que si no puede confiar al 100% en la fuente de datos en su código, sugiero usar la clase de preparación (?).
No piense que usar la clase de preparación lo arreglará sin usar la clase de preparación correctamente. Soy bastante nuevo en esto, así que publique las correcciones como respuesta si no estoy en lo correcto.
$ wpdb- > prepare ("SELECT * FROM tabla WHERE ID =% d AND name =% s", $ id, $ name);
En la declaración anterior, hay 2 atributos adicionales. Una para la identificación y otra para el nombre. Hasta donde lo leí, cada uno corresponde en orden al número de elementos en su consulta. También% s = cadena,% d = entero y% f = flotante.
Además, en mi lectura, si no pones los atributos adicionales, entonces preparar no hará nada. Habrá una advertencia, pero si la desactivas, quizás no lo sepas.
Aquí hay un ejemplo de la referencia de clase en sí misma, donde agregan una clase de preparación en un INSERTAR a continuación.
$ wpdb- > query ($ wpdb- > prepare ("INSERT INTO $ wpdb- > postmeta ( post_id, meta_key, meta_value) VALUES (% d,% s,% s) ", array (10, $ metakey, $ metavalue)))
Mi preocupación es que la respuesta con votos ascendidos es incorrecta según la misma página a la que 'nadie' hace referencia. Supongo que usas prepare () pero no otros métodos de escape de php estándar porque también tomé esta respuesta como correcta ... hasta que profundice más.
De todos modos ... tal vez las cosas hayan cambiado desde la respuesta original.
Lea otras preguntas en las etiquetas wpdb