Sì, è possibile. È un classico caso di condizione razziale.
La rapida spiegazione:
È possibile che 2 richieste simultaneamente supera il primo controllo, ottieni $num == 0 ed entrambi inseriscono una nuova riga.
Per eliminarlo devi creare un UNIQUE vincolo che copre (user_id, ip, date) colonne
La lunga spiegazione: