Проблема здесь: $banners = array($ban);
. То, что вы пытаетесь сделать, это включить все объявления в массиве $banners
как запись, но вы не можете этого достичь.
Правильный код для включения записи в массив: $banner[] = $ban
. Таким образом, каждое объявление, полученное в результате вашего запроса, будет сохранено как отдельная запись.
Таким образом, правильный код будет:
$sql = mysql_query("SELECT * FROM ads");
$banner = array(); //Define the array before trying to add elements.
header('Content-type: text/xml');
while($row = mysql_fetch_array($sql))
{
$title = $row['title'];
$img = $row['file'];
$body = $row['body'];
$ban = '<b>'.$title.'</b><br><br><img src="ads/'.$img.'"><br><br>'.$body;
$banner[] = $ban; //Adding a new entry at the end.
$html = array_rand($banner); //Getting a random entry.
}