6. 関数(3)
最後は、値を更新する関数です。
//----------------------------------------------------------------------
// 値を更新する
//
// array dbc_update( int $cid, string $name, string [$chkstr] )
//
// 引き数 $cid LinkID
// $name カウンターの名前
// $chkstr 検査用文字列
//
// 戻り値 更新後の値
//----------------------------------------------------------------------
- function dbc_update( $cid, $name, $chkstr=NULL )
- {
- global $dbc_table;
- global $dbcn_name;
- global $dbcn_day;
- global $dbcn_lastip;
- global $dbcn_total;
- global $dbcn_today;
- global $dbcn_yeday;
-
- global $dbc_diff;
-
- // テーブルをロックする
- $sql = "LOCK TABLES $dbc_table WRITE";
- mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
-
- // 日付更新検査
- $days = gmdate( "z", time() + $dbc_diff );
- $sql = "UPDATE $dbc_table SET $dbcn_day=$days, "
- ."$dbcn_yeday=$dbcn_today, $dbcn_today=0 "
- ."WHERE $dbcn_name='$name' AND $dbcn_day<>$days";
- $result = mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
-
- // 値を更新
- if( is_null( $chkstr ) )
- $sql = "UPDATE $dbc_table SET $dbcn_total=$dbcn_total+1, "
- ."$dbcn_today=$dbcn_today+1 "
- ."WHERE $dbcn_name='$name'";
- else
- $sql = "UPDATE $dbc_table SET $dbcn_total=$dbcn_total+1, "
- ."$dbcn_today=$dbcn_today+1, $dbcn_lastip='$chkstr' "
- ."WHERE $dbcn_name='$name' AND $dbcn_lastip<>'$chkstr'";
-
- $result = mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
-
- // 結果を得る
- $sql = "SELECT $dbcn_total, $dbcn_today, $dbcn_yeday "
- ."FROM $dbc_table WHERE $dbcn_name='$name'";
- $result = mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
-
- // ロック解除
- $sql = "UNLOCK TABLES";
- mysql_query( $sql, $cid ) or die( "Failed to query of [$sql]" );
-
- return mysql_fetch_array( $result );
- }
この関数も、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 ] →次
|