2009-09-26 13 views
6

私はPHPスクリプトを持っていますが、何らかの理由でmysqlは値を選択してカラムとして扱い続けます。MySQL:where句のエラーの不明な列

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

に変身:ここに私のSQLクエリの例がある

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

エラー:中

不明な列 'テスト' 'どこ 句'

私も試しました:

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

答えて

9

奇妙な?どうして?それは何が間違っているのか正確に言う。テーブルには「テスト」の列はありません。あなたは正しいテーブルを持っていますか? 'tutorial.users'?テーブルの名前が違っていると確信していますか?たぶん、あなたは、データベースはMySQLでtutorial

+0

作品今、おかげで – user169551

+0

うん、私は彼がクエリでデータベースの名前を追加していると思います。..または多分彼はのuname =「テスト」ユーザーからtutorial.usersを選択したいです。 – halocursed

+0

np。答えを選択することを忘れないでください:)とStackoverflowへようこそ。 –

34

という仮定..あなただけのテーブル名ではなく、データベースを参照する必要が

SELECT * from users WHERE uname = 'test'; 

行うためのもの、バッククォートはindentifierが列名であることを示しています。 (他のRDBMSはこれを使用するか、二重引用符で囲みます)。

したがって、「uname」という名前の列の値が「test」という列の値と等しいすべての行を表示します。しかし、あなたのテーブルにtestという名前のカラムがないので、あなたが見たエラーが発生します。

バッククォートを一重引用符で置き換えます。

+4

ああ、それは本当の説明です;) –

4

例:

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

は、$のuname周りの単一引用符に注意してください。クエリをエコーすると、あなたのクエリの$のuname変数の周りに引用符を欠場ならば、これはしかし、出力 -

SELECT * FROM Administrators WHERE Username LIKE 'thierry' 

で、これはあなたがMySQLのでは

SELECT * FROM Administrators WHERE Username LIKE thierry 

をGET-ますものです2つのクエリが異なります。 thierryは入力文字列で、引用符で正しくカプセル化されています.2番目のクエリではそうではありません。これはMySQLでエラーを引き起こします。

私はこのことができますし、私は同じ問題を持っていたし、それはタイプミスであることが判明し

+0

素晴らしい答え。いつ使うべきかを理解するのを助けました。ありがとう –

0

非常に良いではありませんこれは私の日本語を言い訳願っています。 私のエラーメッセージが表示されました:

Unknown column 'departure' in 'where clause' 

私は私のテーブルで、非常に列をチェックし、それは私がそれゆえ、エラーメッセージを投げて、表に「depature」とNOT「出発」としてそれを綴らていた、ということが判明しました。

私はその後に私のクエリを変更:

Unknown column 'depature' in 'where clause' 

、それが働きました!

私は明らかに、あなたが正しく列名の綴りを確認してください。

私はこれが助けてくれることを願っています。

0

また、linux(bash)コマンドラインから次のコマンドを実行すると、 "Unknown column in where句"という問題が発生しました。

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

これは私が二重引用符 "TEST01" と単一引用符 'TEST01' を交換していた

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

を得たものです。それは私のために働いた。どのようにSQLクエリを実行しているかによって違いがあります。

スクリプト内の変数に値を割り当てた後、その変数をスクリプトによって実行されるSQL文で使用すると、わずかな違いがあります。

仮定する変数が

var=testing 

であり、あなたがスクリプト内からMySQLへのこの値を渡したい場合は、単一引用符で働きます。

select '$var' 

異なるエンジンでバッククォートと引用符が異なると評価されることがあります。

これは、Linuxのコマンドラインから作業したクエリです。

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