per il primo quesito:
nn ha molto senso usare mktime assieme a date, in quanto la funzione time() ti restituisce direttamente l'unix timestamp odierno.

inoltre nella query devi confrontare direttamente i 2 timestamp, quindi senza usare nessun tipo di funzione mySQL; per questo motivo la seconda query funziona, mentre la prima no.
ancora migliore sarebbe una cosa di questo tipo:
codice:
$query = "SELECT * FROM TABELLA WHERE data >= UNIX_TIMESTAMP(NOW())"