人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下の本でのsession70以降に掲載されている会員認証システムで、DBエラーが出てしまいます。
http://book.mycom.co.jp/support/bookmook/PHP/


まず、会員新規登録画面で県テーブルから値を取得してきません。
当然、DBには県データを作成してあります。
http://www.boardholic.net/member/index.php?type=regist&action=form

他の項目を埋めて会員登録を行うとunknown errorが出ます。
$result->getDebugInfo()でechoを掛けますと、[nativecode=1065 ** Query was empty] と出ます。

次に、PHPMyAdminで会員マスターに直接データを挿入し、会員削除を行いますと、syntax error が出ます。
$result->getDebugInfo()のechoでは、
DELETE FROM m_member WHERE id = [nativecode=1064 ** 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 3]

一応、必死にソースを追って、変数、引数、定数などechoで調べました。
そもそも、稼動したサンプルを掲載しているはずですから・・・
この本の著者はモジュール版のローカルで試しているはずですが、レンタルサーバーがCGI版PHPということなど関係あるのでしょうか?

レンタルサーバー ヘテムル
http://heteml.jp/service/function/

どなたか、エラー原因をご推察いただけないでしょうか?

●質問者: seadwell
●カテゴリ:ウェブ制作
✍キーワード:AT CGI dB DELETE ECHO
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● know94space
●100ポイント ベストアンサー

問題が3つあるということですね。

1)入力画面で県が表示されない

2)入力フォームで、unknown errorが表示される[Query was Empty]

3)会員削除で、文法エラーが出る。

1)については、

確認方法としては、

PHPmyAdminで、県を取り出すところで実行されているSQL文を実行してみて県のリストが取り出せるか?

を確認する。

SELECT * FROM m_ken;

取り出せた後、正確にHTMLに出力できているか?

がチェックポイントになりそうです。

MYDB.inc.phpというファイル

db_get_ken_dataの関数が正確かどうかをチェックする。

2)実行しているSQL文を表示させてみてください。

多分、SQL文が空なのではないかと思います。だから、Query was Emptyと表示されるのではないかと。

3)DELETE FROM m_member WHERE id =

で終わっているので、idの値が指定されていないためにSQL文が成立していない。

文法エラーとして表示されているのではないかと思います。

MYDB.inc.phpというファイル

db_delete_member_idという関数に間違いがあるか、idがうまく渡されていないのかもしれません。

おそらく、どの動作もレンタルサーバーで違いが出そうな処理は思いつきませんでした。

◎質問者からの返答

know94space さま

御回答ありがとうございます。ほんっと助かりました。

おかげで無事正常動作を確認いたしましたm(_ _)m

結論から書きますと、sub.inc.php の function sjis2euc_for_Winodows($data)およびfunction euc2sjis_for_Winodows($data)が邪魔をしておりました。

know94space 様のおっしゃるとおり、CGI版PHP関係なくソースに問題があるとのご指摘で、MYDB.inc.php中心に調べていきました。

(1)ですが、MYDB.inc.phpのSQL(function execute_sql($conn,$sql))では無事取得されているのに、function db_get_ken_data($conn)では値が空になっているところまでつきとめ、多次元配列をしているfunction select_arrays($conn, $sql)に原因があると睨み、片っ端から、echoを掛けたところ、$value = sjis2euc_for_Winodows($value);のところを吊り上げました。

sjis2euc_for_Winodows部分は文字コード変換の定型サブルーチンでしたので、気にも留めていませんでしたが、コメントアウトしたら正常終了を確認しました。

ここまでくれば、(2)(3)の問題も know94space さまのおっしゃるとおり、

> 多分、SQL文が空なのではないかと思います。だから、Query was Emptyと表示される・・・

> idの値が指定されていないためにSQL文が成立していない・・・

の問題解決も簡単でした。

今回、know94space さまの多方向からの問題切り分けにより、原因を突き止められたことは実に的確なご指摘で、また、デバックのコツまでご教授いただいたことに大変感激しています。

実は、3週間くらいハマっていて精根尽きて質問したところでした。

500文字しか質問できないので、もっと多くの情報を入れたかったのですが、これだけの少ない質問情報から問題解決の糸口を見つけてくださったことに感謝するばかりです。

function sjis2euc_for_Winodows のデバックはまだで、無事正常動作確認の途中経過のご報告です。

なんとお礼を申していいやら・・・。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ