moguraで画像カウンタが表示されない件

moguraで画像カウンタが表示されない件

XREAサーバでmoguraというアクセス解析ソフトを使おうと思ったら、なぜか画像カウンタが表示されなかった。
今の今まで放置していたけど、最近どうしても使いたくなったのでソースをちょっと調べてみた。そしたら、妙なところで引っかかっていた。

変更前

433 : 		//カウンター増加
434 : 		if($write_flg && !$u){
435 : 			$res = $db->query("SELECT * FROM ".constant("DB_COUNTER")." WHERE counter_date = '".gmdate("Y-m-d", time()+constant("TIME_DIFF")*3600)."' LIMIT 1;");
436 : 			if($res->numRows()){
437 : 				$db->query("UPDATE ".constant("DB_COUNTER")." SET counter_val=counter_val+1 WHERE counter_date = '".gmdate("Y-m-d", time()+constant("TIME_DIFF")*3600)."';");
438 : 			}else{
439 : 				$db->query("INSERT INTO ".constant("DB_COUNTER")." (counter_date,counter_val) VALUES ('".gmdate("Y-m-d", time()+constant("TIME_DIFF")*3600)."',1);");
440 : 			}
441 : 		}

変更後

433 : 		//カウンター増加
434 : 		if($write_flg && $res->fetchRow()){
435 : 			$res = $db->query("SELECT * FROM ".constant("DB_COUNTER")." WHERE counter_date = '".gmdate("Y-m-d", time()+constant("TIME_DIFF")*3600)."' LIMIT 1;");
436 : 			if($res->fetchRow()){
437 : 				$db->query("UPDATE ".constant("DB_COUNTER")." SET counter_val=counter_val+1 WHERE counter_date = '".gmdate("Y-m-d", time()+constant("TIME_DIFF")*3600)."';");
438 : 			}else{
439 : 				$db->query("INSERT INTO ".constant("DB_COUNTER")." (counter_date,counter_val) VALUES ('".gmdate("Y-m-d", time()+constant("TIME_DIFF")*3600)."',1);");
440 : 			}
441 : 		}

PHPもろくに読んだことないし、ろくなデバッグ環境も持ってないから、試行錯誤しながらも何とか見つけ出した。このソフトはPEARというライブラリを使っているので、その点で余計に手間がかかった。

修正箇所はデータベース絡みの処理。データベースからSELECTで取ってきたレコードに対して、numRows()を使用する部分。レコードにデータが挿入されていれば何の問題もないのだけど、空のレコードに対してnumRows()関数を使用すると「0」ではなく「1」が返ってくる。ちなみに1個の場合も「1」が返ってくる。
処理中では、空レコードに対してnumRows()の結果に「0」が返ってくることを期待しているため、問題が発生してしまう。そこで、fetchRow()関数を用いてレコードの有無の判定を行うように変更してやる。これで、見かけ上まともに動くようにはなった。多分。

それにしても、何なんだこの妙な動きは。バグというか、環境の違いみたいなものだろうか。

%d人のブロガーが「いいね」をつけました。