Sim, é possível. É um caso clássico de condição de corrida.
A explicação rápida:
Há uma chance de que 2 solicitações simultaneamente passe na primeira verificação, obtenha
$num == 0
e ambos inserem uma nova linha. Para eliminá-lo você precisa criar um
UNIQUE
restrição que cobre (user_id, ip, date)
colunas A longa explicação: