まず最初に、呼出される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が予約語だと書いてあるページがあったので`で括ってやったりもしましたが結果は同じです
データベースの呼出はできてますし、抽出条件がなければデータが取得できることも確認しています。
データベースの指定テーブル内に抽出条件となるフィールドがあることも間違いありません。
どこが悪くてこのようなエラーになっているのでしょうか?
基本的な形式そのものは過去に作った物をコピペしてからはじめているので、余計にエラーの理由が分かりません。
あれこれと何時間も試しましたがどうにも解決できません。
どなたかお助けください。
No.5ベストアンサー
- 回答日時:
$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'] ."'");
たぶんこれかな?
回答頂き、誠にありがとうございます。
教えて頂いたもの全てと、'を`に変えたもの、それを組み合わせたものと試してみましたが、どれもエラーになってしまいます。
$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に変更することはできます。
No.6
- 回答日時:
5です。
コピペしてやってみましたか?
私が書いたものとは微妙にちがってるようですが・・・
また、そのエラーはSQLに対してのものです。
エラーメッセージが英語なので、理解しづらいとは思いますが、読み解かないとまた同じ壁にすぐぶち当たる事になりますよ。
度々の回答ありがとうございます。
コピペでももちろん試しました。
過去に見よう見まねで作ったPHPがあってそれを参考にやっていたのですが、それのときは予約語keyを``(バッククオート)で括ったこともあったので、''(シングルクオート)のタイプとバッククオートのタイプと両方試したという意味でした。
もう一度過去に作った物をいろいろ見返してみましたが、
$temp_result=$db->getSelect("*","main","where username=$in[test]");
という形で作ってある物
$temp_result=$db->getSelect("*","main","where username='$in[test]'");
という形で作ってある物の両方があり、望むように動いてくれているのですが・・・何が悪いのかさっぱり検討が
もう他のサンプルコード公開しているページなどいろいろ見回って勉強します。
No.4
- 回答日時:
残念ですが、まず基礎を抑えた方がいいです。
PHP: 配列 - Manual
http://php.net/manual/ja/language.types.array.php
発行される最終のSQLもちゃんと確認してください。
ご指摘のサイトはPHPを調べるとき必ず出てくるので、いろいろなページに飛びならが必ず目を通していますが、ここで何を言っているのかなかなか理解できないため皆さんにお尋ねしています。
申し訳ありませんが、これだけではこのURLのどこの部分を指摘されているのか分かりません。
何が問題かご存じでしたら「ここをこうすれば」と具体的に教えて頂けましたら非常にうれしいのですが、ご存じないのでしょうか。
知らなければいつまで経っても解決できない、でも非常に初歩的な入力も簡単なことだと想像するのですが・・・
No.3
- 回答日時:
>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になっていますか?
確認できる事象は確実に確認することが大事だと思います。
バシッと解決方法を回答できずに申し訳ないです。
回答ありがとうございます。
が、で、結局どうすればいいのでしょうか。
>確認できる事象は確実に確認することが大事だと思います。
数値を変えてみたり、コードをいじくってみたり、もちろん自分でいろいろ思い当たる事象を確認してみたりしたつもりです。
ちょっと分からないからといって聞いたわけではありません。
まさかこんなところでつまずくとは思っておりませんでしたが、この初歩的なところから一晩費やしてしまっております。
No.2
- 回答日時:
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]'としてみたところ
エラーは出なかったものの、きちんと処理されたか確認するためのトラップをそのままスルーしたので、単なる文字列として認識されてしまったようです。
No.1
- 回答日時:
ロジックの前にとりあえず
連想配列
× $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
と、最初の質問のエラーとは違うエラーが出ました。
他を変えているわけでもないのに、なぜ違うエラーが出るのかますます混乱です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php エラー 2 2022/10/23 16:43
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- X(旧Twitter) Hello, We received your appeal regarding your acco 1 2022/09/12 03:57
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Call to undefined method MDB2...
-
実行時エラー3131 FROM 句の構...
-
テキストボックスに入れた内容...
-
MySQLでデータベースにデータin...
-
PHPで[]の使い方について
-
PHP+MySQLでの配列のinsert文に...
-
ResultSetインターフェイスでの...
-
配列に値が入らない
-
csvファイルのデータをSQLiteに...
-
エクセルVBAについて
-
<VB.NET>INSERT文でDBにデータ...
-
JAVA SQLServerException 列名 ...
-
sqlから多次元配列に要素を格納...
-
VB.NET エラーになる箇...
-
MySQLにHTMLタグを挿入したい
-
mysqliを使ってデータベースを...
-
GROUP_CONCATで条件指定
-
SQLインジェクション対策
-
htmlとphpの分離
-
XAMMPが起動しません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
SQL文が実行できません
-
テキストボックスに入れた内容...
-
in 'where clause'のエラーの理由
-
エラー3011
-
SQL文の実行に失敗しました???
-
LocalのNotesメールDBをVBAで参...
-
SELECT COUNTで取得した結果の表示
-
codeigniter 複数モデルでトラ...
-
PHP(PDO)でDBの情報を完全一...
-
Accessのテーブルへ複数の主キ...
-
phpのPEARのMDB2を使って出たエ...
-
ASPでRecordCountが使用でき...
-
zend(phpフレームワーク)でトラ...
-
データフォームウィザードで追...
-
PHP4でのSmarty派生クラスの定...
-
Call to undefined method MDB2...
-
DAOでデータベースを二つ開くに...
-
SQLiteでカラムを追加
おすすめ情報