Do your date functions need to be SQL functions?
Without looking at a SQL reference manual, you could just use PHP to do your date calculations. Also, is there any good reason for using MySQL's native date format over UNIX timestamps? I've found UNIX timestamps far easier to deal with.
$in_3_years = mktime(date("G"),date("i"),date("s"),date("n"),date("j"),(date("Y") + 3));
$db->query("INSERT INTO t1 ( begin_date, expire_date)
VALUES (UNIX_TIMESTAMP(NOW()), " . $in_3_years . ")");
The above code, of course, assumes that the MySQL server and the PHP server are in the same time zone and are set to the same time (or are literally the same server). For the sake of consistency, you may want to use:
$in_3_years = mktime(date("G"),date("i"),date("s"),date("n"),date("j"),(date("Y") + 3));
$db->query("INSERT INTO t1 ( begin_date, expire_date)
VALUES (" . time() . ", " . $in_3_years . ")");
Even if this is just a temporary solution, if will work, and if you'd still prefer to use the native MySQL date formats, you can use date(), strftime(), or some other preferred function to format the dates.
Just some ideas.