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

PHPとMySQLを用いてシステム開発をしています。
xampp最新版でローカルで開発していますが、疑問がありましたので質問させて下さい。

【質問abstruct】
phpでフォームデータを投稿して同じページにアクセスして処理を行う場合、投稿前とデータが変わらないフィールドについて「hiddenタグ+$_POSTで前ページからの情報を引き継ぐ」のと、「mySQLにアクセスして情報を受け取る」のとでは、ごく大雑把に、一般的に言ってどちらが早いですか?尚、データが変わったフィールドについては、いずれにせよmySQLのstatusというフィールドを更新することになります。

【質問detail】
現在、statusという名前のDBでステータス管理をしています。そこでセッションのようなものを作成して、idやname等10項目、合計40chars程の情報を管理し、次画面で表示したり利用したりしています。フォーム投稿により、いくつかの項目が変化しますが、変化しない項目の方が多いです。

【質問更に詳細】
コメント欄に示す。

よろしくお願いします!


●質問者: ReoReo7
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB MySQL name PHP XAMPP
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●120ポイント ベストアンサー

hidden項目の有無はありますが、いずれの場合もフォームからの投稿を受け付けるという処理は発生してますので応答速度の早い順に下記のような具合になりますが、体感できるほどの速度差にはなりません

1.【例1】処理増加はphpがPOSTを受け取る項目増の分だけ

2.【例2】データベースからphpの変数へ読み込むため若干遅くなる

3.【phpのセッション変数利用】クッキーのやりとりが入りますのでクライアント-サーバ間の通信が若干増えますがデータの安全面から、これを採用するほうが無難でしょう

サーバの動作として軽い順は下記のような具合になります

1.【例1】

2.【phpのセッション変数利用】

3.【例2】

まったくの余談ですが、MySQLからのデータ抜き出しは下記のような具合にすればよろしいかと思います

$sql = "SELECT * FROM status WHERE id = '$id' LIMIT 0,1";
if( $result = mysql_query( $sql ) ){
 if ( mysql_num_rows( $result ) == 1) {
 $item = mysql_fetch_array( $result, MYSQL_ASSOC );
 }
}

・LIMITをつけることでMySQL側の処理時間短縮になります

・$name = $item['name'];のような処理を項目数分だけ行うのは効率悪いので、連想配列のままで使う事を考えたほうが良いでしょう

・連想配列としてのみ使うのであればMYSQL_ASSOCをつけておくと良いでしょう

・Webフォームの処理のような短時間で単純な接続の場合はmysql_free_resultを行う分だけ時間的ロスとなる場合も多いため自動開放に任せたほうが良いでしょう

http://dev.mysql.com/doc/refman/5.1/ja/select.html

http://www.php.net/manual/ja/function.mysql-free-result.php

http://www.php.net/manual/ja/function.mysql-num-rows.php

◎質問者からの返答

ありがとうございます!

詳しい回答でプログラミングの指針が立ち、大変助かりました。

それと、データ抜き出しのコードも示して頂いてありがとうございます。

結果表示に1秒くらいかかってしまうので、ブラウザの描画の問題なのか、DBアクセスのコードが悪いのか分からず悩んでいたので助かりました。

まだチョット遅いですが、おかげさまでSQL文をひとつ削ることができ、高速化の目処がたちました!

関連質問


●質問をもっと探す●



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