Los backticks deben usarse para los identificadores de tabla y columna, pero solo son necesarios cuando el identificador es una palabra clave reservada de MySQL , o cuando el identificador contiene espacios en blanco o caracteres más allá de un conjunto limitado (ver más abajo) A menudo se recomienda evitar el uso de palabras clave reservadas como identificadores de columna o tabla cuando sea posible, evitando el problema de las citas.
Las comillas simples deben usarse para valores de cadena como en la VALUES()
lista. MySQL también admite las comillas dobles para los valores de cadena, pero las comillas simples son más ampliamente aceptadas por otros RDBMS, por lo que es un buen hábito usar comillas simples en lugar de dobles.
MySQL también espera DATE
y DATETIME
valores literales a ser de un solo citado como cadenas como '2001-01-01 00:00:00'
. Consulte la documentación de Literales de fecha y hora para obtener más detalles, en particular alternativas para usar el guión -
como delimitador de segmento en las cadenas de fecha.
Entonces, usando su ejemplo, yo doble comillas la cadena PHP y usar comillas simples en los valores 'val1', 'val2'
. NULL
es una palabra clave de MySQL y un valor especial (no), y por lo tanto no está entre comillas.
Ninguno de estos identificadores de tabla o columna son palabras reservadas o hacen uso de caracteres que requieren comillas, pero de todos modos las he citado con comillas invertidas (más sobre esto más adelante ...).
Las funciones nativas del RDBMS (por ejemplo, NOW()
en MySQL) no se deben citar, aunque sus argumentos están sujetos a la misma cadena o reglas de cotización de identificador ya mencionadas.
Retroceso (`)
tabla y columna ───────┬─────┬──┬──┬──┬────┬──┬────┬──┬────┬──┬ ───────┐
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
$ query = " INSERTAR EN` table` (`id`,` col1`, `col2`,` date`, `updated`)
VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW ()) ";
↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑
Palabra clave sin comillas ─────┴┴┴┘ │ │ │ │ │ │ │││││
Cadenas entre comillas simples (') ───────────┴────┴──┴────┘ │ │ │││││
Comillas simples (') FECHA ───────────────────────────┴──────────┘ ││││ │
Función sin comillas ─────────────────────────────────────────┴┴┴┴┘
Interpolación variable
Los patrones de comillas para las variables no cambian, aunque si tiene la intención de interpolar las variables directamente en una cadena, debe ser entre comillas dobles en PHP. Solo asegúrese de haber escapado correctamente de las variables para su uso en SQL. ( En su lugar, se recomienda utilizar una API que admita declaraciones preparadas, como protección contra la inyección de SQL ).
// Lo mismo con algunos reemplazos variables
// Aquí, un nombre de tabla variable $ table está entre comillas y las variables
// en la lista VALUES están entre comillas simples
$ query = "INSERTAR EN` $ table` (`id`,` col1`, `col2`,` date`) VALUES (NULL, '$ val1' , '$ val2' , '$ date' ) ";
Declaraciones preparadas
Cuando trabaje con declaraciones preparadas, consulte la documentación para determinar si se deben citar o no los marcadores de posición de la declaración. Las API más populares disponibles en PHP, PDO y MySQLi, esperan marcadores de posición sin comillas , al igual que las API de declaraciones más preparadas en otros idiomas:
// PDO example with named parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (:id, :col1, :col2, :date)";
// MySQLi example with ? parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (?, ?, ?, ?)";
Caracteres que requieren comillas de comillas en los identificadores:
De acuerdo con la documentación de MySQL , no necesita citar identificadores (retroceso) utilizando el siguiente conjunto de caracteres:
ASCII: [0-9,a-z,A-Z$_]
(letras latinas básicas, dígitos 0-9, dólar, guión bajo)
Puede usar caracteres más allá de ese conjunto como identificadores de tabla o columna, incluido el espacio en blanco, por ejemplo, pero luego debe citarlos (hacer retroceso).
"tablename"
, y las comillas simples son para literales, por ejemplo'this is a some text'
. Los back-ticks nunca se usan en SQL estándar. (Si necesita incluir una comilla doble en un identificador,"odd""tablename"
'Conan O''Brien'