mysqli_query()
não retorna uma matriz ou objeto de matriz que você pode usar com foreach(). O tipo de retorno de mysqli_query() é um recurso. Você obtém dele em um loop, como sua segunda solução. É mais simples usar while() em vez de for():
$cast_list = mysqli_query($dblink, $sql);
while ($role = mysqli_fetch_assoc($cast_list)) {
echo "<tr><td width='50%'>".$role['appeared_as']."</td>";
}
O loop terminará automaticamente quando a linha buscada for NULL no final do conjunto de resultados. Você não precisa saber o número de linhas antes do loop.
Re seu comentário:
Depois de procurar alguns fatos , tenho que admitir que minha resposta acima não é totalmente verdadeira. Ou não é verdade para algumas versões do PHP.
No PHP 5.4, um recurso mysqli_result adicionou
Iterator
funcionalidade, você pode use-o em um foreach()
. Mas seu host aparentemente usa uma versão mais antiga do PHP. A prática recomendada é desenvolver na mesma versão de todos software para o qual você implantará, para que você não seja pego por esse tipo de surpresa.