Info
2021年3月5日 (金)
6人が見てるかも
Menu
Top
PHP+MySQL
カウンター1
imgタグ変換
カウンター2
Downloads
カウンター系
掲示板系
その他1
その他2
BBS
掲示板
スクリプト関係
Links
PHP総合
データベース総合
PHPアクセラレータ
PHP関連サイト
スクリプト検索
その他
RSS Viewer (実験)
RSS Feeds
RSS News Feed 全ニュース
RSS News Feed DA実験室関連
RSS News Feed PHP/DB関連
RSS feed meter for http://www.darkangel.jp/
RDF Resource Description Framework Developer Icon
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 ] →次

広告