¿Usar backticks (`) en lugar de comillas simples (') en una sentencia SQL?
Tengo este código que se muestra parcialmente aquí por brevedad:
global $wpdb;
// crea jwp_bids en la base de datos si no existe
$table = $wpdb->prefix . "jwp_bids";
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`bid_amt` text NOT NULL,
Cuando escribí originalmente el código, usé '
dentro de los paréntesis y el código no funcionaba.
Luego cambié las comillas simples por backticks y el código se ejecutó perfectamente.
¿Alguien podría explicar:
- ¿Cuál es el término correcto para estas comillas especiales ` ?
- ¿Por qué se usan en lugar de comillas simples ' ?
- ¿Esto aplica solo para MySQL? ¿WordPress? ¿PHP?
- ¿Dónde puedo encontrar una referencia técnica sobre esto para no molestar a esta excelente comunidad?

Las comillas invertidas y las comillas regulares (tanto simples como dobles) tienen significados distintos en SQL. Las comillas indican una cadena literal, mientras que las comillas invertidas son identificadores entrecomillados. Esto no es específico de WordPress, sino una forma general en SQL de entrecomillar columnas o tablas.
Por ejemplo, imagina que estás ejecutando una consulta comparando dos columnas:
SELECT * FROM wp_posts WHERE post_name = post_title
Si comparas con comillas simples ('post_name' = 'post_title'
) esto compararía las cadenas literales, que nunca serían iguales. Sin embargo, con comillas invertidas, se referiría a la columna.
¿Por qué usar comillas invertidas? Si una columna se llama igual que una palabra reservada en SQL, o contiene un espacio, necesitas entrecomillarla. Por ejemplo, si tuvieras una columna llamada count
, tendrías que entrecomillarla cada vez que te refieras a ella, ya que COUNT()
es una función (y por lo tanto, una palabra reservada) en MySQL.
Consulta también https://dba.stackexchange.com/questions/23129/benefits-of-using-backtick-in-mysql-queries

"Si comparas con comillas simples ('post_title' = 'post_title') esto compararía las cadenas literales, que nunca son iguales." De hecho, parecen bastante iguales. ¿Quizás quisiste decir 'post_name' = 'post_title'?
