INSERT OR IGNORE INTO visits VALUES ($ip, 0);UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;
This requires the "ip" column to have a UNIQUE (or PRIMARY KEY) constraint.
EDIT: Another great solution: https://stackoverflow.com/a/4330694/89771.
Since 3.24.0 SQLite also supports upsert, so now you can simply write the following
INSERT INTO visits (ip, hits)VALUES ('127.0.0.1', 1)ON CONFLICT(ip) DO UPDATE SET hits = hits + 1;
I'd prefer UPDATE (+ INSERT if UPDATE fails). Less code = fewer bugs.
UPDATE (+ INSERT if UPDATE fails)