Info

2017年11月24日 (金)
11人が見てるかも
Menu
Top
PHP+MySQL
カウンター1
imgタグ変換
カウンター2
Downloads
カウンター系
掲示板系
その他1
その他2
BBS
掲示板
スクリプト関係
Links
History
2006
2005
2004
2003
2002
2001
レンタルサーバ比較
RSS Viewer (実験)
E-Mail me E-Mail icon
PHP WebRing
@PHP.ring
各種書籍

PHPプロ!マガジン 2007年夏号表紙
PHPプロ! マガジン
2007年夏号 Vol.4


PHP関連書籍一覧
DB関連書籍一覧
3D関連・その他書籍


MySQLで学ぶSQL実践のツボ Windows対応編
MySQLで学ぶSQL実践のツボ Windows対応編


PHP+MySQL - カウンター2

6. 関数(3)

 最後は、値を更新する関数です。

//----------------------------------------------------------------------
// 値を更新する
//
// array dbc_update( int $cid, string $name, string [$chkstr] )
//
// 引き数  $cid     LinkID
//         $name    カウンターの名前
//         $chkstr  検査用文字列
//
// 戻り値  更新後の値
//----------------------------------------------------------------------
  1. function dbc_update( $cid, $name, $chkstr=NULL )
  2. {
  3. global $dbc_table;
  4. global $dbcn_name;
  5. global $dbcn_day;
  6. global $dbcn_lastip;
  7. global $dbcn_total;
  8. global $dbcn_today;
  9. global $dbcn_yeday;
  10. global $dbc_diff;
  11. // テーブルをロックする
  12. $sql = "LOCK TABLES $dbc_table WRITE";
  13. mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
  14. // 日付更新検査
  15. $days = gmdate( "z", time() + $dbc_diff );
  16. $sql = "UPDATE $dbc_table SET $dbcn_day=$days, "
  17. ."$dbcn_yeday=$dbcn_today, $dbcn_today=0 "
  18. ."WHERE $dbcn_name='$name' AND $dbcn_day<>$days";
  19. $result = mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
  20. // 値を更新
  21. if( is_null( $chkstr ) )
  22. $sql = "UPDATE $dbc_table SET $dbcn_total=$dbcn_total+1, "
  23. ."$dbcn_today=$dbcn_today+1 "
  24. ."WHERE $dbcn_name='$name'";
  25. else
  26. $sql = "UPDATE $dbc_table SET $dbcn_total=$dbcn_total+1, "
  27. ."$dbcn_today=$dbcn_today+1, $dbcn_lastip='$chkstr' "
  28. ."WHERE $dbcn_name='$name' AND $dbcn_lastip<>'$chkstr'";
  29. $result = mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
  30. // 結果を得る
  31. $sql = "SELECT $dbcn_total, $dbcn_today, $dbcn_yeday "
  32. ."FROM $dbc_table WHERE $dbcn_name='$name'";
  33. $result = mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
  34. // ロック解除
  35. $sql = "UNLOCK TABLES";
  36. mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
  37. return mysql_fetch_array( $result );
  38. }

 この関数も、SCDB の同様の関数と使い方は同じです。ただ、処理の中身はちょっと複雑になってます。

 14,15行目でテーブルをロックします。

 18〜22行目で日付の検査をします。日付が変わった場合の更新処理もここでします。

 25〜32行目で値を更新します。$chkstr が NULL かどうかで、問い合わせる SQL 文が異なります。

 37〜39行目で更新された値を取得します。

 42,43行目でテーブルのロックを解除します。

 SCDB の場合戻り値は数値でしたが、この関数の戻り値は配列になっています。ここが SCDB と大きく違うところです。

$cnt = dbc_update( $cid, 'test' );

 とした場合、$cnt[$dbcn_total] には総カウント数、$cnt[$dbcn_today] には今日のカウント数、$cnt[$dbcn_yeday] には昨日のカウント数が入っています。

[Page: 1 2 3 4 5 (6) 7 ] →次

広告

ServerQueen
月々525円〜
RSS Feeds
RSS News Feed 全ニュース
RSS News Feed DA実験室関連
RSS News Feed PHP/DB関連
[Valid RSS]
RSS feed meter for http://www.darkangel.jp/

check out my neighbors in meatspace

RDF Resource Description Framework Developer Icon