2012-04-19 11 views
7

Tengo columnas cuyos nombres tienen la estructura nameUser.Name, pero tengo problemas para actualizarlos. He intentado algunas posibilidades:Actualización de una columna MySQL que contiene punto (.) En su nombre

// Ideally, I'd like to do this (since the User.Name is 'dynamic', ie, it depends 
// on who is logged in): 
$userLogged = 'Some.User'; 
$columnName = 'name' . $userLogged; 
mysql_query("UPDATE Industries SET '$columnName'='$name' WHERE id='$id'"); 
// Another try: 
mysql_query("UPDATE Industries SET $columnName='$name' WHERE id='$id'"); 
// Alternatively, if the above cannot be achieved: 
mysql_query("UPDATE Industries SET 'nameSome.User'='$name' WHERE id='$id'"); 
// Yet another try: 
mysql_query("UPDATE Industries SET nameSome.User='$name' WHERE id='$id'"); 

Ninguno de los anteriores funciona, sin embargo. ¿Por qué?

+0

En una nota lateral, tenga cuidado de que no termine vulnerable a [ataques de inyección SQL] (http://en.wikipedia.org/wiki/SQL_injection#Incorrectly_filtered_escape_characters). – Jeroen

+0

Para su problema, probablemente necesite citar el nombre de la columna, la respuesta probablemente se encuentre en [esta documentación de MySQL] (http://dev.mysql.com/doc/refman/5.5/en/identifiers.html), a primera vista, diría que MySQL requiere backticks (o comillas dobles si se permite la variante ANSI) alrededor de nombres de columnas con caracteres de época. – Jeroen

Respuesta

7

En lugar de utilizar comillas simples para el nombre de la columna, use los palos de retroceso (en la mayoría de los teclados, a la izquierda de la tecla 1).

De esta manera:

mysql_query("UPDATE Industries SET `nameSome.User`='$name' WHERE id='$id'"); 
+0

Funciona, gracias. – mrinterested

14

Debido a que es también la sintaxis para database.table.column. Tendrá que citarlos como

`nameUser.name` 

Aunque en realidad, si creó/diseñó el archivo db nunca debería usar nombres de columnas como ese. Es solo una idea horrible

+0

gracias por la sugerencia, pero no soy un programador. Sin embargo, recordará esto para el futuro! – mrinterested

Cuestiones relacionadas