Mira, lo que estas haciendo es que por cada resultado creas una tabla nueva donde muestras tu imagen, haecs un salto de linea <br> y creas mas tablas, esto es porque pusiste el <table> dentro del while.
Si haces lo que puso phpec, vas a tener una columa por cada resultado, pero tal como esta no puedes controlar cuantas columnas hacer.
Lo que podrias hacer es contar primero cuantos resultados obtuviste (mysql_num_rows) y ese numero dividirlo por el numero de columnas que quieres, asi obtendras el nunero de filas. Y asi arregar los <tr> y <td>.
Algo asi:
Código:
$cols = 3; //aqui defines numero de columas.
$num=mysql_num_rows($result);
$filas = floor($num / $cols); //con esto saca el resultado entero de la division.
echo "<table>";
for ($i = 0; $i < $filas; $i++)
{
echo "<tr>";
for ($j=0; $j < $cols ; $j++)
{
$row=mysql_fetch_array($result);
if ($row["foto"] == "") //aqui estoy suponiendo que el campo foto es un texto.
{
echo "<td> </td>"; //esto es para que si la division no es entera los ultimos cuadrados de tu tabla donde muestras als fotos se rellenen con "nada".
}
else
{
echo '<td><img src="fotos/'.$row["foto"].'" border="0"></td>';
} //end del else
} //end del for con $j
echo "</tr>";
} //end del for con $i.
echo "</table>";
Yo lo probe con algo mio y funciono (sin el img si, mostrando texto).