- ベストアンサー
in 'where clause'のエラーの理由
- 質問文章では、DBConnクラスとメインのPHPコードを使用してデータベースの呼び出しを行っています。
- エラーの原因は、抽出条件で使用されているフィールド名が存在しないためです。
- 特に、POSTで受け取った値を使用してWHERE句を作成している部分が問題です。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
$temp_result=$db->getSelect("*","main","where username=". $in['username']); こうじゃない? もしくは $temp_result=$db->getSelect("*","main","where username={$in['username']}"); とか? って思ったけど・・・・ $temp_result=$db->getSelect("*","main","where username='". $in['username'] ."'"); たぶんこれかな?
その他の回答 (5)
- 1minn
- ベストアンサー率57% (52/90)
5です。 コピペしてやってみましたか? 私が書いたものとは微妙にちがってるようですが・・・ また、そのエラーはSQLに対してのものです。 エラーメッセージが英語なので、理解しづらいとは思いますが、読み解かないとまた同じ壁にすぐぶち当たる事になりますよ。
お礼
度々の回答ありがとうございます。 コピペでももちろん試しました。 過去に見よう見まねで作ったPHPがあってそれを参考にやっていたのですが、それのときは予約語keyを``(バッククオート)で括ったこともあったので、''(シングルクオート)のタイプとバッククオートのタイプと両方試したという意味でした。 もう一度過去に作った物をいろいろ見返してみましたが、 $temp_result=$db->getSelect("*","main","where username=$in[test]"); という形で作ってある物 $temp_result=$db->getSelect("*","main","where username='$in[test]'"); という形で作ってある物の両方があり、望むように動いてくれているのですが・・・何が悪いのかさっぱり検討が もう他のサンプルコード公開しているページなどいろいろ見回って勉強します。
- tany180sx
- ベストアンサー率63% (239/379)
残念ですが、まず基礎を抑えた方がいいです。 PHP: 配列 - Manual http://php.net/manual/ja/language.types.array.php 発行される最終のSQLもちゃんと確認してください。
お礼
ご指摘のサイトはPHPを調べるとき必ず出てくるので、いろいろなページに飛びならが必ず目を通していますが、ここで何を言っているのかなかなか理解できないため皆さんにお尋ねしています。 申し訳ありませんが、これだけではこのURLのどこの部分を指摘されているのか分かりません。 何が問題かご存じでしたら「ここをこうすれば」と具体的に教えて頂けましたら非常にうれしいのですが、ご存じないのでしょうか。 知らなければいつまで経っても解決できない、でも非常に初歩的な入力も簡単なことだと想像するのですが・・・
- yamada_g
- ベストアンサー率68% (258/374)
>abcdはPOSTで送る前のform内のinputで適当に打っただけの文字ですから、これにはおそらく何の意味も持たないと思います。 え?? abcdと打ったとしたら、$in[test](なのか$in[username]なのかよくわかりませんが) の部分が abcd と展開されて実行されることになるのですよね? それで最終的に where username = abcd となっているから >Unknown column 'abcd' in 'where clause' ってなるんですよね? なんで何の意味も持たなくなっちゃうんでしょう・・・ >where username='$in[username]'としてみたところ >単なる文字列として認識されてしまったようです。 ようです。ではなくて、getResultの中ででも実際に実行されるSQLを出力してみて確認してはどうでしょうか。 自分が想定しているどおりのSQLになっていますか? 確認できる事象は確実に確認することが大事だと思います。 バシッと解決方法を回答できずに申し訳ないです。
お礼
回答ありがとうございます。 が、で、結局どうすればいいのでしょうか。 >確認できる事象は確実に確認することが大事だと思います。 数値を変えてみたり、コードをいじくってみたり、もちろん自分でいろいろ思い当たる事象を確認してみたりしたつもりです。 ちょっと分からないからといって聞いたわけではありません。 まさかこんなところでつまずくとは思っておりませんでしたが、この初歩的なところから一晩費やしてしまっております。
- yamada_g
- ベストアンサー率68% (258/374)
DBで実行されるSQLが select ~ where username= abcd となっているのだと思います。 これではabcdはカラム名だと判断されてしまうので、 select ~ where username= 'abcd' と引用符でくくるようにしないといけないのではないでしょうか? ただ、申し訳ないのですがphpは全然しらないので、 具体的にソースをどのように変更すればいいのかは回答できません・・・ 単純に $temp_result=$db->getSelect("*","main","where username='$in[test]'"); これで済むのですかね?
お礼
ありがとうございます。 abcdはPOSTで送る前のform内のinputで適当に打っただけの文字ですから、これにはおそらく何の意味も持たないと思います。 念のため where username=`$in[username]` としてみたところ Unknown column '' in 'where clause' というエラーが出、 where username='$in[username]'としてみたところ エラーは出なかったものの、きちんと処理されたか確認するためのトラップをそのままスルーしたので、単なる文字列として認識されてしまったようです。
- tany180sx
- ベストアンサー率63% (239/379)
ロジックの前にとりあえず 連想配列 × $array[key] ○ $array['key'] ○ "{$array['key']}" SQL SELECT * FROM table WHERE string_column = 'string';
お礼
回答ありがとうございます。 $array[`key`]でやったところ Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in というエラーになりました。 また、これまで、そして他のところでも$array[key]の形でやって何もエラーは出ていません。 keyは予約語ですからkeyに関しては``で括る必要があることは知ってますが。。。 ちなみにもう一度元に戻してやってみたところ You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 と、最初の質問のエラーとは違うエラーが出ました。 他を変えているわけでもないのに、なぜ違うエラーが出るのかますます混乱です。
お礼
回答頂き、誠にありがとうございます。 教えて頂いたもの全てと、'を`に変えたもの、それを組み合わせたものと試してみましたが、どれもエラーになってしまいます。 $temp_result=$db->getSelect("*","shop_user","where username=". $in[`username`] ."`"); $temp_result=$db->getSelect("*","shop_user","where username=". $in['username'] ."`"); でやった場合は、 Unknown column '' in 'where clause' このタイプのエラーが、 それ以外の入力方法でした場合は You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 (''の部分は記述内容により違います) のエラーが出てしまいます。 1行目は <?php としていますが、そこに問題があるという意味なのでしょうか? サーバーの設定を確認したところMySQLのバージョンは5.0.51a、PHPのバージョンは4.4のようです。 また、PHPはPHP5.2.8やPHP5.3.5に変更することはできます。