Проблема в том, что ваш запрос помещает $ restaurant_id в строку. Вы это процитировали. Вы хотите заменить его следующим:
$sql = sprintf("
INSERT INTO rest_pics
(branch_id, pic_name)
VALUES (%s, '%s')" //<-- I removed the quotes around the first %s
, mysql_real_escape_string($restaurant_id)
, mysql_real_escape_string(basename($target_file)));
Кроме того, вы можете захотеть использовать PDO вместо устаревших функций mysql_ *. Они чище, безопаснее, быстрее и современнее. Вот ваш тот же запрос с использованием PDO:
$statement = $db->prepare('INSERT INTO rest_pics (branch_id, pic_name) VALUES (?, ?)');
$statement->execute(array($restaurant_id, $target_file));
Обратите внимание, что мне не приходилось беспокоиться о кавычках, потому что PDO правильно определяет тип данных для входящих запросов и результатов. Кроме того, это безопасно по умолчанию - ручное экранирование отсутствует. Другими словами, этого бы не случилось, если бы вы использовали PDO.