PHP+MYSQLの質問です.NOには整数が格納されています.変数$aの値ではないNOを全て表示するプログラムです.


-------------------------
// クエリを作成
$query = "SELECT * FROM nnn WHERE NO == '$a'";
$result = mysql_query($query);

// 結果を表示
while ($row = mysql_fetch_array($result)){
echo $row['NO'];
}

// MySQLへの接続を閉じる
mysql_close($link) or die("MySQL切断に失敗しました。");
?>
-------------------------

しかし表示されません.
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /XXX.php on line 20(whileの行)となってしまいます.

$query = "SELECT * FROM nnn";
にすると正しくデータベースに格納されている全てのNOが表示されます.

どうしたら,変数$aの値ではないNOが全て表示するプログラムになりますか?

回答の条件
  • 1人50回まで
  • 登録:2010/03/02 03:40:15
  • 終了:2010/03/08 21:59:25

ベストアンサー

id:GreenStar No.7

GreenStar回答回数192ベストアンサー獲得回数462010/03/02 16:34:32

ポイント50pt

NOって単語はバッククォートで囲んでくださいな。

MySQLは大文字小文字の違いでも別物扱いになるから念のため確認してね。

$query = "SELECT * FROM nnn WHERE `NO` <> '$a'";

詳しくは下記を見てね。

http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html

http://dev.mysql.com/doc/refman/5.1/ja/comparison-operators.html


あと、下のほうで id:b-wind さんも書いておられますが、面倒でもエラー処理は入れといたほうがいいですよ。

$result = mysql_query($query) or die(mysql_error());
id:sitokositoko

ありがとうございました.

NOをバッククォートで囲んだらできました

2010/03/08 21:57:05

その他の回答(11件)

id:nzworks No.1

nzworks回答回数13ベストアンサー獲得回数02010/03/02 04:10:44

ポイント15pt

where句の条件で

WHERE NO == '$a'

このイコール2つが1つではないでしょうか。

WHERE NO = '$a'

id:sitokositoko

同じエラーが返されてしまいます

2010/03/02 11:24:52
id:heke2mee No.2

heke2mee回答回数162ベストアンサー獲得回数432010/03/02 05:00:13

ポイント15pt

SELECT * FROM nnn WHERE NO == '$a'

というSQLが実行されていると思います。

"SELECT * FROM nnn WHERE NO == '".$a."'"

と変更すればいけると思います。(テストはしてません)

id:sitokositoko

同じエラーが返されてしまいます

2010/03/02 11:24:56
id:aug7251976 No.3

aug7251976回答回数10ベストアンサー獲得回数42010/03/02 10:23:37

ポイント14pt

NOが$aの値のものを抽出

 where NO = '$a'

NOが空のものを抽出

 where NO is null

NOが$aでないものを抽出

 where NO != '$a'

NOが空でないものを抽出

 where NO is not null

$aが普通の値のときと、空のときでは微妙にSQLが違うと思います。

また、NOがintのときは''で囲う必要はありませんが、textだったら''で囲わないとだめです。

id:km1967 No.4

km1967回答回数541ベストアンサー獲得回数402010/03/02 11:08:43

ポイント14pt

最初のSQL分が間違っている

正解は

$query = "SELECT * FROM nnn WHERE NO != '$a'";
id:sitokositoko

同じエラーが返されてしまいます

2010/03/02 11:22:19
id:taknt No.5

きゃづみぃ回答回数13481ベストアンサー獲得回数11982010/03/02 11:37:56

ポイント14pt

$query = "SELECT * FROM nnn WHERE NO == '$a'";

って $aに一致するNOの値を検索するってことになるから この変数の値ならば

$query = "SELECT * FROM nnn WHERE NO == '".$a."'";

とかにしないとダメなんじゃないかな?

でも 質問では $aの値に一致しないだから

$query = "SELECT * FROM nnn WHERE NO != '".$a."'";

だと思います。

id:km1967 No.6

km1967回答回数541ベストアンサー獲得回数402010/03/02 12:55:45

ポイント5pt

カラムNOの型が整数ではないというオチではないのか?

id:sitokositoko

残念!

2010/03/08 21:57:12
id:GreenStar No.7

GreenStar回答回数192ベストアンサー獲得回数462010/03/02 16:34:32ここでベストアンサー

ポイント50pt

NOって単語はバッククォートで囲んでくださいな。

MySQLは大文字小文字の違いでも別物扱いになるから念のため確認してね。

$query = "SELECT * FROM nnn WHERE `NO` <> '$a'";

詳しくは下記を見てね。

http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html

http://dev.mysql.com/doc/refman/5.1/ja/comparison-operators.html


あと、下のほうで id:b-wind さんも書いておられますが、面倒でもエラー処理は入れといたほうがいいですよ。

$result = mysql_query($query) or die(mysql_error());
id:sitokositoko

ありがとうございました.

NOをバッククォートで囲んだらできました

2010/03/08 21:57:05
id:tomoki3 No.8

もきもき回答回数24ベストアンサー獲得回数32010/03/02 18:29:09

ポイント10pt

WHERE NO='$a'"

ではないでしょうか?

違っていたら、スイマセン…

id:anoncom No.9

あのん回答回数16ベストアンサー獲得回数22010/03/02 18:50:49

ポイント10pt

SQL では == ではなく = として下さい。

また、カラム名 NO またはテーブル名 nnn がMySQLの予約語と衝突している可能性があります。

この衝突を避け、それぞれテーブル名、カラム名として認識させるには

バッククオートでくくってあげる必要があります。

こちらで試してみて下さい。

SELECT * FROM nnn WHERE NO == '$a';

   ↓

SELECT * FROM `nnn` WHERE `NO` = '$a';

id:anoncom No.10

あのん回答回数16ベストアンサー獲得回数22010/03/02 18:56:39

ポイント10pt

変数 $a と同じ値を探したい場合は == ではなく = とします。

今回は変数 $a ではないデータを取り出したいとの事ですので、比較演算子を != とすることで否定形になります。

また、カラム名 NO またはテーブル名 nnn がMySQLの予約語と衝突している可能性があります。

この衝突を避け、それぞれテーブル名、カラム名として認識させるには

バッククオートでくくってあげる必要があります。

上記の事から、SQLを以下の様に書き直してみて下さい。

SELECT * FROM nnn WHERE NO == '$a';

   ↓

SELECT * FROM `nnn` WHERE `NO` != '$a';

id:yusuke_818 No.11

ドナルド回答回数34ベストアンサー獲得回数02010/03/02 19:13:03

ポイント10pt

NOが$aの値のものを抽出

 where NO = '$a'


NOが空のものを抽出

 where NO is null

NOが$aでないものを抽出

 where NO != '$a'

NOが空でないものを抽出

 where NO is not null

$aが普通の値のときと、空のときでは微妙にSQLが違うと思います。

また、NOがintのときは''で囲う必要はありませんが、textだったら''で囲わないとだめです。

where句の条件で

WHERE NO == '$a'

このイコール2つが1つではないでしょうか。

WHERE NO = '$a'

id:yusuke_818 No.12

ドナルド回答回数34ベストアンサー獲得回数02010/03/04 19:33:48

ポイント10pt

NOが$aの値のものを抽出

 where NO = '$a'


NOが空のものを抽出

 where NO is null

NOが$aでないものを抽出

 where NO != '$a'

NOが空でないものを抽出

 where NO is not null

$aが普通の値のときと、空のときでは微妙にSQLが違うと思います。

また、NOがintのときは''で囲う必要はありませんが、textだったら''で囲わないとだめです。

  • id:b-wind
    まずは下記を実行してエラー内容を確認してみたら?
    $result = mysql_query($query) or die mysql_error();
  • id:anoncom
    間違えて重複解答してしまいました。
    すみませんが、後から解答したものの方を解答とさせて下さい。
  • id:GreenStar
    やってみた!
    回答にはいくいつか原因をあげたんだけど、その中のひとつとしてバッククォートと書いたのは無くてもよかった。ごめん。
    あと、かわりに、追加で思いついたので、忘れないうちに書きます!

    $a = ' 1'; のように余分な空白が入ってたり、
    $a = '1'; のように全角が入ってたり、してそうな気がする! あると思います!

    echo $query; で確認してください!!!
  • id:GreenStar
    解決したのだろうか? 開けてももらえないのは凹む!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません