Смысл экранирования состоит в том, чтобы предотвратить взаимодействие данных с синтаксисом SQL.Следовательно, вы не должны избегать всего запроса;только фактические данные.
Поэтому правильная строка будет выглядеть так:
$query = "INSERT INTO `Promotion` (`TransactionID`) VALUES ('".mysql_real_escape_string($transaction_id)."');";
Если вы предпочитаете, это может быть разделено на две строки:
$escaped_transaction_id=mysql_real_escape_string($transaction_id);
$query = INSERT INTO `Promotion` (`TransactionID`) VALUES ('$escaped_transaction_id');";