Codice PHP:
$sql = mysql_query("SELECT .......qui ho la query ;") or die (mysql_error());
while ($new=mysql_fetch_array($sql))
{
        ?>
        <p class="paragrafo">[b]
        <?php
        
echo "$new[nome opera]";
        
?>
        [/b]
        </p>
         [url="gene.php?id=<?php echo "]">[img]images/icon<?php echo [/img]"/>[/url]
        <?php
}
cambialo in

Codice PHP:
$sql = mysql_query("SELECT .......qui ho la query ;") or die (mysql_error());
while ($new=mysql_fetch_array($sql))
{
        ?>
                <div style="float:left;">
        <p class="paragrafo">[b]
        <?php
        
echo "$new[nome opera]";
        
?>
        [/b]
        </p>
         [url="gene.php?id=<?php echo "]">[img]images/icon<?php echo [/img]"/>[/url]
</div>
        <?php
}
In pratica è un problema di html e non di php.
Creati un contenitore div dentro il quale racchiudi la coppia opera e immagine, a questo div applichi uno stile (sarebbe meglio crearti una classe invece di usare l'attributo style) dove definisci il "float:left;" e l'eventuale larghezza massima di ogni blocco.
L'elemento P per default è un elemento blocco. Per quello ti va a capo il resto.