- ベストアンサー
データの重複チェック方法での文法エラーへの対処方法を教えてください
- デザイン関連の作業担当の質問者は、会員番号と店舗番号の重複チェック方法について困っています。現在の重複チェックの関数定義に文法エラーがあり、その修正方法を教えてほしいとのことです。
- 現在の重複チェックの関数定義では、会員番号と店舗番号を条件にデータベースから情報を取得し、重複があるかどうかを確認しています。しかし、文法エラーが出ているため、正しく動作していないようです。
- 修正方法としては、関数定義内のSQL文の一部を修正する必要があります。具体的には、会員番号と店舗番号の比較に使用するシングルクオーテーションの位置が誤っているため、文法エラーが出ています。正しい位置にシングルクオーテーションを移動させて、再度試してみてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> $sql = "select kaiin_no form store_table where kaiin_no = ".$kaiin_no; > Warning: pg_query(): Query failed: ERROR: syntax error at or near "form" at character 17 あ! すみません。 form がまちがいです。 正しくは from です。 $sql = "select kaiin_no from store_table where kaiin_no = ".$kaiin_no; ANo.3 は全部 form になってますね。。。 偉そうなことを書いておきながら面目ないです。。。
その他の回答 (3)
- tomaju
- ベストアンサー率76% (84/110)
> 3行目あたりのところに問題があるようなのですが $sql = "select kaiin_no form store_table".$kaiin_no; where ~ の書き忘れでしょうか。 kaiin_no カラムが数値型で、kaiin_no の値が $kaiin_no と等しいレコードを 検索するのであれば以下のようになるかと思います。 $sql = "select kaiin_no form store_table where kaiin_no = ".$kaiin_no; もしも kaiin_no カラムが文字型であればシングルクオートで囲みます。 $sql = "select kaiin_no form store_table where kaiin_no = '".$kaiin_no."'"; とりあえずこれで動くと思いますが、万が一おかしなデータが入ってくる可能性を考えて やかましいことを言いますと、kaiin_no カラムが数値型の場合 $kaiin_no に数値 以外のものが入らないように別途入力チェックしてください。 文字型の場合適宜エスケープをしてください。 $sql = "select kaiin_no form store_table where kaiin_no = '".mysql_real_escape_string($kaiin_no)."'"; 問題が起きた時は、echo $sql; などとして、できあがりのSQL文を点検してみましょう。 mysql コマンドや phpMyAdmin などから試しに実行してみるのも一手です。 > テーブル名 store_table 内に kaiin_no カラムがあります。 > kaiin_no に重複がないかを確認するためには以下の記述でいいのでしょうか? kaiin_no を重複させない、ある会員番号を持つレコードを 2 行 以上存在させないということであれば、会員番号が一致のみの チェックでよいと思います。 同じ会員番号で複数の店舗に所属することを許すなら、 当初に書いてあったように店舗番号まで含めてチェックする 必要があるかと思います。
補足
ご指導ありがとうございます。 $sql = "select kaiin_no form store_table where kaiin_no = ".$kaiin_no; こちらを入れていましたが 下記エラーになります。 Warning: pg_query(): Query failed: ERROR: syntax error at or near "form" at character 17 in /usr/home/******/html/inc/scp.php on line 149 文法エラーのようなのですが、、、、 どこがまちがっているのでしょう?? とりあえず kaiin_no に重複がないかを確認したいのですが、、 引き続きご指導いただければ幸いです。
- tomaju
- ベストアンサー率76% (84/110)
文法エラーは、次のようなメッセージではないでしょうか。 PHP Fatal error: Can't use function return value in write context in hogehoge.php on line 123 まずいのは下記の場所だと思います。 = なので代入になっています。 if(pg_num_rows($rst) = 0){ 検索結果の行数が 0 (と等しい)か調べたいのだから、 if(pg_num_rows($rst) == 0){ もしくは、 if(pg_num_rows($rst) === 0){ でしょう。 それからPHPの文法「エラー」にはならないと思いますが、 重複チェック関数の定義では引数が 2 つなのに、 function Duplication_Check2($kaiin_no,$tenpo_no){ 関数の呼び出しでは、引数を 3 つセットしています。 Duplication_Check2("store_table","'".$kaiin_no."'",$tenpo_no) 定義が間違っていなければ、 第 1 引数の "store_table" は関数内の $kaiin_no に入っています。 第2引数の "'".$kaiin_no."'" は関数内の $tenpo_no に入っています。 第3引数にセットした $tenpo_no は関数内では使われていません。 期待通りの動作をしないでしょう。
補足
ご指導ありがとうございます。 私なりに分かりやすくしてみました。 テーブル名 store_table 内に kaiin_no カラムがあります。 kaiin_no に重複がないかを確認するためには以下の記述でいいのでしょうか? //重複チェック2 function Duplication_Check2($kaiin_no){ global $db; $sql = "select kaiin_no form store_table".$kaiin_no; $rst = pg_query($db,$sql); if($rst){ if(pg_num_rows($rst) == 0){ return true; }else{ return false; } }else{ return false; } } 3行目あたりのところに問題があるようなのですがどのように記述すればいいのでしょう? ご多忙のところ恐縮ですがご教授くださいませ。
- nora1962
- ベストアンサー率60% (431/717)
関数の引数の数が違うようですが。
補足
ありがとうございます。 store_table のところでしょうか? function Duplication_Check2($store_table,$kaiin_no,$tenpo_no){
お礼
無事うまくいきました!! ご指導、ありがとうございました。。