2009-09-26 145 views
6

Tengo un script PHP y por alguna razón mysql sigue tratando el valor para seleccionar/insertar como una columna. He aquí un ejemplo de mi consulta SQL:MySQL: columna desconocida en where clause error

$query = mysql_query("SELECT * FROM tutorial.users WHERE (uname=`".mysql_real_escape_string($username)."`)") or die(mysql_error()); 

que se convierte en:

SELECT * FROM tutorial.users WHERE (uname=`test`) 

El error fue:

Desconocido columna de 'prueba' en 'donde cláusula'

También he intentado:

SELECT * FROM tutorial.users WHERE uname=`test` 

Respuesta

9

¿Extraño? ¿Cómo es eso? Dice exactamente lo que está mal. No hay una columna de "prueba" en su tabla. ¿Estás seguro de que tienes la mesa correcta? 'tutorial.users'? ¿Estás seguro de que la tabla no tiene un nombre diferente? Tal vez usted pretende hacer

SELECT * from users WHERE uname = 'test'; 

Hay que hacer referencia sólo el nombre de la tabla, no la base de datos .. suponiendo que la base de datos se denomina tutorial

+0

obras ahora, gracias – user169551

+0

Sí creo que está añadiendo el nombre de la base de datos en la consulta .. o tal vez él quiere para seleccionar tutorial.users de los usuarios en la prueba '' = uname; – halocursed

+0

np. no se olvide de seleccionar una respuesta :) y bienvenido a Stackoverflow. –

34

en MySQL, acentos abiertos indican que un indentifier es un nombre de columna. (Otros RDBMS utilizan corchetes o comillas dobles para esto).

Por lo tanto, su consulta fue "darme todas las filas donde el valor en la columna llamada 'uname' es igual al valor en la columna denominada 'prueba'". Pero dado que no hay una columna llamada prueba en su tabla, obtiene el error que vio.

Reemplace los backticks con comillas simples.

+4

oh, esa es la verdadera explicación;) –

4

ejemplo:

$uname = $_POST['username']; 
$sql="SELECT * FROM Administrators WHERE Username LIKE '$uname'" 

Nota las comillas simples alrededor del $ uname. Cuando se hacen eco de la consulta, este es el output-

SELECT * FROM Administrators WHERE Username LIKE 'thierry' 

Sin embargo, si se le pasa la cita alrededor de la variable $ uname en la consulta, esto es lo que va a dan,

SELECT * FROM Administrators WHERE Username LIKE thierry 

En MySQL servidor, las 2 consultas son diferentes. thierry es la cadena de entrada y está encapsulada correctamente entre comillas, donde, como en la segunda consulta, no lo es, lo que causa un error en MySQL.

espero que esto ayude y disculpe mi englis que no es muy buena

+0

Gran respuesta. Me ayudó a entender mejor cuándo usar 'y cuándo no. Gracias –

0

que tenían el mismo problema y que resultó ser un error tipográfico. Mi mensaje de error fue:

Unknown column 'departure' in 'where clause' 

he comprobado esa misma columna en mi mesa y resulta que, yo había escrito como "depature" y no "salida" de la tabla, por lo tanto, lanzando el mensaje de error.

posteriormente he cambiado de consulta a:

Unknown column 'depature' in 'where clause' 

y funcionó!

Así que mi consejo es claro, compruebe que ha escrito correctamente el nombre de la columna.

Espero que haya sido de ayuda.

0

También me enfrenté al problema de la "Columna desconocida en la cláusula where" cuando ejecuté lo siguiente desde la línea de comandos de linux (bash).

mysql -u support -pabc123 -e 'select * from test.sku where dispsku='test01' ; ' 

Esto es lo que tiene

ERROR 1054 (42S22) at line 1: Unknown column 'test01' in 'where clause' 

tuve que reemplazar las comillas simples 'test01' con comillas dobles "test01". Funcionó para mí Hay una diferencia sobre cómo y cómo estás ejecutando las consultas SQL.

Al asignar un valor a una variable en una secuencia de comandos y más tarde, al usar esa variable en una instrucción SQL que debe ejecutarse mediante la secuencia de comandos, existe una pequeña diferencia.

Si la variable suponen es

var=testing 

y desea pasar este valor desde el interior de la escritura a MySQL, a continuación, las frases sola obra.

select '$var' 

Por lo tanto, diferentes motores pueden evaluar los trazos y las comillas de manera diferente.

Esta es mi consulta que funcionó desde la línea de comandos de Linux.

mysql -u support -pabc123 -e 'select * from test.sku where dispsku="test01" ; ' 
Cuestiones relacionadas