php+mysqlアクセスカウンターに関する質問です。


count.phpにアクセスするたびにmysqlのテーブル(acc_log)のフィールド(count)の数値が1増えます。
この場合のcount.phpの記述内容を教えてください。

低レベルな質問で申し訳ありません。
よろしくお願い致します。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/03/15 11:08:11
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント20pt

MySQL 関数を利用し、こんな感じでどうでしょうか。

$con = @mysql_connect('MySQLホスト', 'ログインユーザー', 'パスワード') or die('データベース接続エラー');
mysql_select_db('データベース名', $con);

// テーブルが無い場合には新規作成する
$sql = 'create table if not exists データベース名.acc_log (フィールドの定義);'
$res = mysql_query($sql, $con);

//countを調べる
$sql = 'select * from acc_log where 1;';
$res = mysql_query($sql, $con);

//まだcountが記録されていない場合
if (mysql_num_rows($res) == 0) {
    $sql = 'insert into acc_log (count) values (1);';
    $res = mysql_query($sql, $con);
} else {
    $row = mysql_fetch_array($res);
    $sql = "update acc_log set count='" . $row['count'] + 1 . "' where count='" . $row['count'] . "';";
}
mysql_close($con);

id:xptree

回答ありがとうございます。

1以上数値が増えないのですが…

2009/03/15 07:33:42
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント40pt

主なところは1番の回答の通りでいいけど、同時アクセス時にちゃんとカウントされないね。


わざわざデータとってこなくても、後半部分はこれでいいと思うんだけど。

$sql = 'update acc_log set count = count + 1 ';
$res = mysql_query($sql, $con);

テーブルの作成と最初のレコードの生成は別途行っておくこと。

MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.4.4 UPDATE 構文

id:xptree

回答ありがとうございます。

回答者1さんの

$sql = 'insert into acc_log (count) values (1);';

$res = mysql_query($sql, $con);

$sql = 'update acc_log set count = count + 1 ';

$res = mysql_query($sql, $con);

に変更したのですが

カウントされるたびに数値が増えるのではなくて

レコード(count)が増えてしまいます…

2009/03/15 06:50:17
id:pahoo No.3

回答回数5960ベストアンサー獲得回数633

ポイント20pt

#2で b-wind さんがご指摘した通りです。修正したプログラムを下記に掲げます。

$con = @mysql_connect('MySQLホスト', 'ログインユーザー', 'パスワード') or die('データベース接続エラー');
mysql_select_db('データベース名', $con);

// テーブルが無い場合には新規作成する
$sql = 'create table if not exists データベース名.acc_log (フィールドの定義);'
$res = mysql_query($sql, $con);

//countを調べる
$sql = 'select * from acc_log where 1;';
$res = mysql_query($sql, $con);

//まだcountが記録されていない場合
if (mysql_num_rows($res) == 0) {
    $sql = 'insert into acc_log (count) values (1);';
    $res = mysql_query($sql, $con);
} else {
    $sql = 'update acc_log set count = count + 1; ';
    $res = mysql_query($sql, $con);
}
mysql_close($con);
id:xptree

ありがとうございました。

2009/03/15 11:07:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません