Nope, it explains mysql syntax.
I would take all the functions out of sprintf like this
$title = mysql_real_escape_string($title);
then it is easier to do, you don't need sprintf then.
$query = "INSERT INTO news (title,author,topic,intro,body,date) VALUES ('%s', '%s', '%s', '%s', '%s', '%s') ON DUPLICATE KEY UPDATE
title = '$title' , author = '$author'
etc.
you just don't want to do the PRIMARY col.