1

私のデータベースコードは

SELECT `Title`,`Rating`,`Times_Played` from audio WHERE 'Username'='Hamburger7'

ユーザー名が と等しいエントリはありませんが、Hamburger7とにかく 2 つのエントリが選択されます。'0'条件に一致するエントリを選択する代わりに、(NULL ではなく) に等しいエントリを選択します。

サーバー設定があるPHP管理ページの出力は次のとおりです。

SELECT  `Title` ,  `Rating` ,  `Times_Played` 
FROM audio
WHERE  `Username` =  'Hamburger7'
LIMIT 0 , 30
4

3 に答える 3

2
SELECT `Title`,`Rating`,`Times_Played` from audio WHERE `Username`='Hamburger7'

あなたの文字列 Username を列 username ではなく文字列 Hamburger7 と比較します

于 2013-07-15T21:15:56.623 に答える
2

問題はUsername、クエリに一重引用符が含まれていることだと思います。つまり、MySQL はそれを列名ではなくリテラル文字列と見なします。

SELECT `Title`,`Rating`,`Times_Played` from audio WHERE 'Username'='Hamburger7'

に変更します

SELECT `Title`,`Rating`,`Times_Played` from audio WHERE `Username`='Hamburger7'

またはまだ良い

SELECT Title,Rating,Times_Played from audio WHERE Username='Hamburger7'

列名が予約語でない限り、列名をバックティックに入れる必要はなく、列名を予約語と同じにすることはとにかく悪い考えだからです。

于 2013-07-15T21:17:55.553 に答える
1

Username列のデータ型は数値型で、おそらく INT です。しかし、CHAR や VARCHAR ではないことは間違いありません。

MySQL は文字列リテラル'Hamburger7'を列に一致するデータ型に変換しています。そして、それは INT に関しては 0 に変換されます。

あなたのクエリは効果的です:

WHERE  `Username` = convert_string_literal_to_integer('Hamburger7')

これはと同等です

WHERE  `Username` = 0

(ああ、便利で暗黙的なデータ型変換の喜び!)

于 2013-07-15T22:32:13.633 に答える