4 ms·
Bug Alert Google Adsense Flips out Mysql
While recently building a new App. I ran into a nasty bug that trips Mysql up in very strange and unpleasing way. So here's how to repeat this. You set up a simple table 'yourtable' with 2 columns, 'id' (int) which is set to auto_increment and 'name' (for example). Then run this simple script on a unique (this part is important) named page, for example call you file unique-1.php each time you call this file change the name!
what will happen is that instead of the expected 1 row inserted into to DB you will get 3 rows all repeats of the one expected. Change the name of the file to unique-2.php load again and you will get another 3 insertions. I have tested this on 2 completely separate servers with different distros, same results every time. It also happens with any Adsense advert whatsoever. Considering the nature of this bug I'm suprisesd no answer has come back from Google on this (over a week since reported). I imagine databases filled up with 3 times as much data as necessary all over the web!
Heres the code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Test bug</title>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<div id='vu_ytplayer_vjVQa1PpcFPb8BUW_RRt-RtcJhs9CmRKZDf2_gtwvfw='><a href='http://www.youtube.com/browse'>Watch the latest videos on YouTube.com</a></div><script type='text/javascript' src='http://www.youtube.com/cp/vjVQa1PpcFPb8BUW_RRt-RtcJhs9CmRKZDf2_gtwvfw='></script>
</body>
</html>
<?php
$server = "localhost"; // Server Host
$DBpassword = ""; // Database Password
$DBusername = ""; // Database Username
$database = ""; // Database Name
mysql_connect($server, $DBusername, $DBpassword) or die ("Database CONNECT Error ()");
mysql_select_db($database);
$GetEmail = mysql_query("INSERT INTO yourtable (
id,
name
)
VALUES (
'',
'test'
)") or die ("Database Email Error");
?>
- justinsb 18y agoIt sounds like AdSense is automatically crawling your page to determine which ads to serve in future. I guess if it matters to your app, you'd probably want to figure out the Google IP addresses and exclude them from writing to the DB. You could verify this by posting your HTTP access log. This hadn't occurred to me previously, and I couldn't find anything about it, but I don't see how else Adsense could work. I would imagine it only happens once per page, hence the need to keep changing the file name.
- marcus 18y agoDon't bother trying to find Google's IPs, just block writing to the database when the UserAgent is GoogleBot. It happens more than once per page, as the AdSense bot will occasionally reread the page to see if its content changed and it should start serving different ads.
- agentbleu 18y agointeresting analysis