sql >> Base de Datos >  >> RDS >> Mysql

Cuándo usar comillas simples, comillas dobles y acentos graves en MySQL

Los acentos graves se deben usar para los identificadores de tablas y columnas, pero solo son necesarios cuando el identificador es un Palabra clave reservada de MySQL , o cuando el identificador contiene espacios en blanco o caracteres más allá de un conjunto limitado (consulte a continuación). A menudo, se recomienda evitar el uso de palabras clave reservadas como identificadores de columnas o tablas cuando sea posible, evitando el problema de las comillas.

Se deben usar comillas simples para valores de cadena como en VALUES() lista. MySQL también admite comillas dobles para valores de cadena, pero otros RDBMS aceptan más comillas simples, por lo que es un buen hábito usar comillas simples en lugar de dobles.

MySQL también espera DATE y DATETIME valores literales entre comillas simples como cadenas como '2001-01-01 00:00:00' . Consulte los literales de fecha y hora documentación para obtener más detalles, en particular alternativas al uso del guión - como delimitador de segmento en cadenas de fecha.

Entonces, usando su ejemplo, comillas dobles la cadena de PHP y uso comillas simples en los valores 'val1', 'val2' . NULL es una palabra clave de MySQL y un (no) valor especial y, por lo tanto, no está entre comillas.

Ninguno de estos identificadores de tabla o columna son palabras reservadas ni utilizan caracteres que requieran comillas, pero los he citado de todos modos con acentos graves (más sobre esto más adelante...).

Funciones nativas de RDBMS (por ejemplo, NOW() en MySQL) no deben estar entre comillas, aunque sus argumentos están sujetos a las mismas reglas de comillas de cadenas o identificadores ya mencionadas.

Backtick (`)
table & column ───────┬─────┬──┬──┬──┬────┬──┬────┬──┬────┬──┬───────┐
                      ↓     ↓  ↓  ↓  ↓    ↓  ↓    ↓  ↓    ↓  ↓       ↓
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`, `updated`) 
                       VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW())";
                               ↑↑↑↑  ↑    ↑  ↑    ↑  ↑          ↑  ↑↑↑↑↑ 
Unquoted keyword          ─────┴┴┴┘  │    │  │    │  │          │  │││││
Single-quoted (') strings ───────────┴────┴──┴────┘  │          │  │││││
Single-quoted (') DATE    ───────────────────────────┴──────────┘  │││││
Unquoted function         ─────────────────────────────────────────┴┴┴┴┘    

Interpolación de variables

Los patrones de comillas para las variables no cambian, aunque si tiene la intención de interpolar las variables directamente en una cadena, debe estar entre comillas dobles en PHP. Solo asegúrese de haber escapado correctamente las variables para su uso en SQL. (Se recomienda utilizar una API que admita declaraciones preparadas en cambio, como protección contra la inyección SQL ).

// Same thing with some variable replacements
// Here, a variable table name $table is backtick-quoted, and variables
// in the VALUES list are single-quoted 
$query = "INSERT INTO `$table` (`id`, `col1`, `col2`, `date`) VALUES (NULL, '$val1', '$val2', '$date')";

Declaraciones preparadas

Cuando trabaje con declaraciones preparadas, consulte la documentación para determinar si los marcadores de posición de la declaración deben citarse o no. Las API más populares disponibles en PHP, PDO y MySQLi, espere sin comillas marcadores de posición, al igual que la mayoría de las API de declaraciones 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 invertidas en los identificadores:

Según la documentación de MySQL , no es necesario que comillas (comillas invertidas) los identificadores con 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, incluidos los espacios en blanco, por ejemplo, pero luego debe cítelos (comilla grave).

Además, aunque los números son caracteres válidos para los identificadores, los identificadores no pueden consistir únicamente en números. Si lo hacen, deben estar envueltos en acentos graves.