Come ti avevo accennato c'è un errore di base, ovvero l'utilizzo di un campo chiave.
Non puoi operare come hai scritto, perchè non ha proprio una logica.
Devi fare così: inserire il valore 1 (se la pagina non esiste), oppure aggiornare il numero di visite (se la pagina esiste già).
Il "trucco" funziona se PAGINA è una chiave primaria (e lo è, visto il tuo describe)
INSERT INTO phpbb_contatore(pagina,visite) VALUES ("nomedellapagina",1)
ON DUPLICATE KEY
UPDATE visite=visite+1
Però devi togliere la
KEY `visite` (`visite`)
con un ALTER TABLE (in effetti non deve affatto essere una chiave, e potresti aver problemi con "on duplicate"
Infine, volendo, potremmo discutere su come si fa un contatore per utilizzi massivi in scrittura (cioè come shardare verticalmente
per ridurre il tempo di lock della singola riga), "pagando" il tempo in lettura, ma velocizzando notevolmente la scrittura.
Se non hai capito nulla della frase che ho scritto sopra, allora ti basta quella riga.
Questo che hai messo non può funzionare perchè...
mysql_query("UPDATE phpbb_contatore SET visite = visite+ 1 WHERE pagina = $pagina");
mysql_query("INSERT INTO phpbb_contatore (pagina, visite) VALUES ($pagina, 1)");
mysql_query("SELECT visite FROM phpbb_contatore WHERE pagina = $pagina");
1) la prima update fallisce se la pagina non è mai stata acceduta.
2) la seconda (insert) fallisce se hai già visitato una pagina (cioè non ti consente di creare due righe
"paginaX","1" e "paginaX","1", perchè pagina è una chiave
3) non ritorna quindi dati affidabili.
In sostanza ha proprio un buco di logica