Ti aiuto volentieri, ma premetto che non capisco bene il tuo codice php... è un pochetto confusionale.
Ti dico la logica di base del consiglio che ti do: hai le due variabili caricate magari dal DB che sono una $img e l'altra $testo. Dato che non possiamo inviare la variabile $img al CSS, sfrutteremo localmente gli elementi dell CSS nel codice php.
Certo così si sporca il codice html ma temo sia uno dei pochi modi per farlo senza incasinare troppe cose.
Allora ripeto, ammesso che $img sia la variabile che contenga il path dell'immagine e $testo la variabile che contiene il testo (entrambi caricati da DB), puoi usare questa forma qui:
Codice PHP:
<?php
$img= "Immagine.JPG";
$testo = "Testo";
$n = "50px";
$m = "100px";
echo '<div id="bottone" style=" background-image:url('.$img.'); height:'.$n.'; width:'.$m.'; text-align:center">'.$testo.'</div>';
?>
Che si traduce in html come
codice:
<div id="bottone" style=" background-image:url(Immagine.JPG); height:50px; width:100px; text-align:center">Testo</div>
Ovviamente variabili come $n ed $m le ho messe io sul momento per farti capire che devi definire le dimensioni dell'immagine (sperando che siano dimensioni identiche per tutte le immagini che andarai a caricare dinamicamente dal DB.
Così parametrizzato qualsiasi testo e qualsiasi immagine che tirerai fuori dal DB si andranno a sostituire correttamente nel codice.