count.phpにアクセスするたびにmysqlのテーブル(acc_log)のフィールド(count)の数値が1増えます。
この場合のcount.phpの記述内容を教えてください。
低レベルな質問で申し訳ありません。
よろしくお願い致します。
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);
主なところは1番の回答の通りでいいけど、同時アクセス時にちゃんとカウントされないね。
わざわざデータとってこなくても、後半部分はこれでいいと思うんだけど。
$sql = 'update acc_log set count = count + 1 '; $res = mysql_query($sql, $con);
テーブルの作成と最初のレコードの生成は別途行っておくこと。
回答ありがとうございます。
回答者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)が増えてしまいます…
#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);
ありがとうございました。
回答ありがとうございます。
1以上数値が増えないのですが…