重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

日頃はデザイン関連の作業担当なのですが、、、、

データの重複チェック方法で 
会員番号と店舗番号を入力するのですが 登録画面には

//会員番号重複チェック
if(Duplication_Check2("store_table","'".$kaiin_no."'",$tenpo_no)){
$err .= "会員NO「".$kaiin_no."」で店舗NO「".$tenpo_no."」は既に登録されています。<br />";
}

としてまして、重複のエラー表示をさせています。


重複チェックの関数定義では

//重複チェック2
function Duplication_Check2($kaiin_no,$tenpo_no){
global $db;
$sql = "select * from store_table where kaiin_no='".$kaiin_no."' and tenpo_no=".$tenpo_no;
$rst = pg_query($db,$sql);
if($rst){
if(pg_num_rows($rst) = 0){
return true;
}else{
return false;
}
}else{
return false;
}
}

としたのですが ここに文法エラーが出ます。

初心者の質問で恐縮なのですがどこをどうすればいいのでしょうか?

ご教授いただければ幸いです。

A 回答 (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 になってますね。。。
偉そうなことを書いておきながら面目ないです。。。
    • good
    • 0
この回答へのお礼

無事うまくいきました!!

ご指導、ありがとうございました。。

お礼日時:2011/08/31 22:55

> 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 に重複がないかを確認したいのですが、、

引き続きご指導いただければ幸いです。

補足日時:2011/08/31 15:17
    • good
    • 0

文法エラーは、次のようなメッセージではないでしょうか。



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行目あたりのところに問題があるようなのですがどのように記述すればいいのでしょう?
ご多忙のところ恐縮ですがご教授くださいませ。

補足日時:2011/08/31 10:22
    • good
    • 0

関数の引数の数が違うようですが。

この回答への補足

ありがとうございます。

store_table のところでしょうか?

function Duplication_Check2($store_table,$kaiin_no,$tenpo_no){

補足日時:2011/08/29 17:07
    • good
    • 0

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

関連するカテゴリからQ&Aを探す