2009-09-26 22 views
6

Mam skrypt PHP i z jakiegoś powodu mysql nadal traktuje wartość, aby wybrać/wstawić jako kolumnę. Oto przykład z mojej kwerendy SQL:MySQL: Nieznana kolumna gdzie błąd klauzuli

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

To zamienia się:

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

Wystąpił błąd:

Unknown column 'test' in 'where klauzula'

Próbowałem również:

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

Odpowiedz

9

Dziwne? Jak to? Mówi dokładnie, co jest nie tak. W twojej tabeli nie ma kolumny "test". Czy na pewno masz odpowiedni stół? "tutorial.users"? Czy na pewno tabela nie ma innej nazwy? Może masz na myśli zrobić

SELECT * from users WHERE uname = 'test'; 

Trzeba odwoływać się tylko nazwę tabeli, a nie bazy danych .. zakładając, że baza danych jest nazwany tutorial

+0

prace teraz, dzięki – user169551

+0

Tak myślę, że dodaje się nazwę bazy danych w zapytaniu .. a może chce wybrać tutorial.users od użytkowników, gdzie „test” uname =; – halocursed

+0

np. nie zapomnij wybrać odpowiedzi :) i witaj w Stackoverflow. –

34

w MySQL, backticks wskazują, że identyfikatorem jest nazwa kolumny. (Inne RDBMS używają do tego nawiasów lub podwójnych cudzysłowów).

Twoje zapytanie brzmiało: "podaj wszystkie wiersze, w których wartość w kolumnie o nazwie" uname "jest równa wartości w kolumnie o nazwie" test "". Ale ponieważ w tabeli nie ma kolumny o nazwie test, pojawia się błąd, który zobaczyłeś.

Zamień odciski na pojedyncze cytaty.

+4

oh, więc to jest prawdziwe wytłumaczenie;) –

4

przykład:

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

Uwaga pojedyncze cudzysłowy wokół $ uname. Kiedy echo zapytania, to jest output-

SELECT * FROM Administrators WHERE Username LIKE 'thierry' 

Jednak jeśli pominąć cytat wokół $ uname zmiennej w zapytaniu, to co będziesz GET-

SELECT * FROM Administrators WHERE Username LIKE thierry 

Na MySQL serwer, 2 zapytania są różne. thierry jest ciągiem wejściowym i poprawnie enkapsulowany w cudzysłów, gdzie jak w drugim zapytaniu, nie jest, co powoduje błąd w MySQL.

Mam nadzieję, że to pomoże i wybaczyć moje Engliš który nie jest bardzo dobra

+0

Świetna odpowiedź. Pomógł mi lepiej zrozumieć, kiedy używać ", a kiedy nie. Dzięki –

0

miałem ten sam problem i okazało się, że to literówka. Mój komunikat o błędzie:

Unknown column 'departure' in 'where clause' 

Sprawdziłem tę samą kolumnę w moim stole i okazuje się, że miałem napisane go jako „depature” a nie „wyjścia” w tabeli, dlatego rzuca się komunikat o błędzie.

I następnie zmieniło moje zapytanie do:

Unknown column 'depature' in 'where clause' 

i to działa!

Moja rada jest jednoznaczna: sprawdź, czy poprawnie wpisałeś nazwę kolumny.

Mam nadzieję, że to pomogło.

0

Miałem także do czynienia z problemem "Nieznana kolumna w klauzuli gdzie" podczas wykonywania następującego z linii poleceń linux (bash).

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

To co mam

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

musiałem wymienić apostrofów 'test01 pasuje' z cudzysłowy "test01 pasuje". To zadziałało dla mnie. Jest różnica w sposobie i sposobie wykonywania kwerend sql.

Przypisując wartość do zmiennej w skrypcie i później, używając tej zmiennej w instrukcji sql, która musi zostać wykonana przez skrypt, występuje niewielka różnica.

Jeśli zmienna Załóżmy jest

var=testing 

i chcesz przekazać tę wartość od wewnątrz skryptu do mysql, a następnie pojedyncze cytaty działać.

select '$var' 

Różne silniki mogą odmiennie ocenić zwroty i wyceny.

To jest moje zapytanie, które działało z linii poleceń Linuksa.

mysql -u support -pabc123 -e 'select * from test.sku where dispsku="test01" ; ' 
Powiązane problemy