brotherhood_of_LAN - 3:51 pm on Aug 4, 2011 (gmt 0)
If you think it's the value pairs that are going into the DB, try logging it in a tab delim list and have mysql_affected_rows() alongside the insert data
With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row and 2 if an existing row is updated.
So you'll see how it's behaving from the start.
Though I'm not quite sure by what you mean by
is ignoring not null on urls occasionally
If URL/term are a primary key, all unique combinations are inserted and the increment column is updated otherwise. If data is not being inserted/updated at all it's happening before this query or the query is returning an error (have you escaped the data?)