dポイントプレゼントキャンペーン実施中!

まず最初に、呼出されるdb.phpの一部
<?
class DBConn {
var $dbhost="でーたべーすのURL";
var $dbuser,$dbpasswd,$db,$connect;
function DBConn($db="データベース名",$dbuser="ユーザー名",$dbpasswd="パスワード"){
$this->dbuser=$dbuser;
$this->dbpasswd=$dbpasswd;
$this->db=$db;
$this->connect=mysql_connect($this->dbhost,$this->dbuser,$this->dbpasswd);
mysql_select_db($this->db,$this->connect);
}
function getResult($query){
$result[result]=mysql_query($query,$this->connect) or die(mysql_error());
$result[count]=@mysql_num_rows($result[result]);
return $result;
}
function getSelect($field,$table,$where){
$query="select $field from $table $where;";
$result=$this->getResult($query);
return $result;
}

ここからメインのPHP
<?php
$in = "";
if($_SERVER['REQUEST_METHOD'] == "POST") {
$in = $_POST;
}else{
$in = $_GET;
}

include "../base/db.php";
$db=new DBConn();

$temp_result=$db->getSelect("*","main","where username=$in[username]");

書き出しでこのようにしているのですが、
これを呼出す前ページで<input type="text" name="username">としてPOSTしてやると
Unknown column 'abcd' in 'where clause'
というエラーが出ます。(abcdは前ページで適当に入力した文字)


$temp_result=$db->getSelect("*","main","");
このように抽出条件無しの場合、問題なくデータは全て取得でき、
$temp_result=$db->getSelect("*","main","where username=$in[test]");
とか
$temp_result=$db->getSelect("*","main","where test=$in[test]");
のように、抽出条件部分を実際にフィールド名として存在する別の名前を入れると
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
このようなエラー表示になります
ネットで調べていたら、usernameが予約語だと書いてあるページがあったので`で括ってやったりもしましたが結果は同じです

データベースの呼出はできてますし、抽出条件がなければデータが取得できることも確認しています。
データベースの指定テーブル内に抽出条件となるフィールドがあることも間違いありません。
どこが悪くてこのようなエラーになっているのでしょうか?

基本的な形式そのものは過去に作った物をコピペしてからはじめているので、余計にエラーの理由が分かりません。
あれこれと何時間も試しましたがどうにも解決できません。
どなたかお助けください。

A 回答 (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'] ."'");

たぶんこれかな?
    • good
    • 0
この回答へのお礼

回答頂き、誠にありがとうございます。
教えて頂いたもの全てと、'を`に変えたもの、それを組み合わせたものと試してみましたが、どれもエラーになってしまいます。

$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に変更することはできます。

お礼日時:2011/06/07 17:09

5です。



コピペしてやってみましたか?
私が書いたものとは微妙にちがってるようですが・・・

また、そのエラーはSQLに対してのものです。
エラーメッセージが英語なので、理解しづらいとは思いますが、読み解かないとまた同じ壁にすぐぶち当たる事になりますよ。
    • good
    • 0
この回答へのお礼

度々の回答ありがとうございます。
コピペでももちろん試しました。
過去に見よう見まねで作ったPHPがあってそれを参考にやっていたのですが、それのときは予約語keyを``(バッククオート)で括ったこともあったので、''(シングルクオート)のタイプとバッククオートのタイプと両方試したという意味でした。

もう一度過去に作った物をいろいろ見返してみましたが、
$temp_result=$db->getSelect("*","main","where username=$in[test]");
という形で作ってある物
$temp_result=$db->getSelect("*","main","where username='$in[test]'");
という形で作ってある物の両方があり、望むように動いてくれているのですが・・・何が悪いのかさっぱり検討が

もう他のサンプルコード公開しているページなどいろいろ見回って勉強します。

お礼日時:2011/06/08 20:19

残念ですが、まず基礎を抑えた方がいいです。



PHP: 配列 - Manual
http://php.net/manual/ja/language.types.array.php

発行される最終のSQLもちゃんと確認してください。
    • good
    • 0
この回答へのお礼

ご指摘のサイトはPHPを調べるとき必ず出てくるので、いろいろなページに飛びならが必ず目を通していますが、ここで何を言っているのかなかなか理解できないため皆さんにお尋ねしています。

申し訳ありませんが、これだけではこのURLのどこの部分を指摘されているのか分かりません。


何が問題かご存じでしたら「ここをこうすれば」と具体的に教えて頂けましたら非常にうれしいのですが、ご存じないのでしょうか。
知らなければいつまで経っても解決できない、でも非常に初歩的な入力も簡単なことだと想像するのですが・・・

お礼日時:2011/06/03 22:23

>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になっていますか?
確認できる事象は確実に確認することが大事だと思います。

バシッと解決方法を回答できずに申し訳ないです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

が、で、結局どうすればいいのでしょうか。

>確認できる事象は確実に確認することが大事だと思います。

数値を変えてみたり、コードをいじくってみたり、もちろん自分でいろいろ思い当たる事象を確認してみたりしたつもりです。
ちょっと分からないからといって聞いたわけではありません。

まさかこんなところでつまずくとは思っておりませんでしたが、この初歩的なところから一晩費やしてしまっております。

お礼日時:2011/06/03 22:03

DBで実行されるSQLが


select ~ where username= abcd
となっているのだと思います。
これではabcdはカラム名だと判断されてしまうので、
select ~ where username= 'abcd'
と引用符でくくるようにしないといけないのではないでしょうか?

ただ、申し訳ないのですがphpは全然しらないので、
具体的にソースをどのように変更すればいいのかは回答できません・・・
単純に
$temp_result=$db->getSelect("*","main","where username='$in[test]'");
これで済むのですかね?
    • good
    • 0
この回答へのお礼

ありがとうございます。

abcdはPOSTで送る前のform内のinputで適当に打っただけの文字ですから、これにはおそらく何の意味も持たないと思います。

念のため where username=`$in[username]` としてみたところ
Unknown column '' in 'where clause'
というエラーが出、
where username='$in[username]'としてみたところ
エラーは出なかったものの、きちんと処理されたか確認するためのトラップをそのままスルーしたので、単なる文字列として認識されてしまったようです。

お礼日時:2011/06/03 18:17

ロジックの前にとりあえず



連想配列
× $array[key]
○ $array['key']
○ "{$array['key']}"

SQL
SELECT * FROM table WHERE string_column = 'string';
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
$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
と、最初の質問のエラーとは違うエラーが出ました。
他を変えているわけでもないのに、なぜ違うエラーが出るのかますます混乱です。

お礼日時:2011/06/03 18:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!