mmm....
es obvio que solo te almacene la ultima, ya que no usas el operador
[]= para agregar un nuevo elemento al array...
Código PHP:
while ($cat = $db->fetch($query_cat)) {
$categoria []= array (
"$cat[cat_id]" => "$cat[cat_nombre]",
);
}
var_dump($categoria);
te sugiero
leas el manual de PHP
http://php.net/array