mysqli возвращает простой запрос как объект - почему? - PullRequest
1 голос
/ 17 августа 2011

У меня простая проблема с пониманием того, как анализировать возвращаемые stdObject из простых запросов с помощью mysqli ... Я пробовал несколько разных способов превратить stdObject в массив, а также просто использовать fetch_object (), как здесь:

$cart_q = "SELECT card_name FROM products WHERE product_cat = 'HPC' LIMIT 12";
$result = $mysqli->query($cart_q);

echo "<table>";
$i = 0;
while ($products = $result->fetch_object()) {
   if($i == 0)
      echo "<tr>";
      echo "<td>". $products->card_name ."</td>";
      $i++;
      if($i == 3) {
echo "</tr>";
$i=0;
     }
 }
 echo "<table>"; 

Я сделал print_r объекта и получил ассоциативный массив, но разбить его, чтобы отобразить на странице, еще не получилось ... есть идеи?

1 Ответ

0 голосов
/ 29 августа 2011

Примечание: я на самом деле думаю, что ваша проблема в итерации по массиву результатов, поэтому метка должна быть php или / и HTML, но давайте посмотрим:

Обычно полезно отделять извлекаемые записи от представления, например, так:

$mysqli = new MySQLi($db_host, $db_user, $db_pass, $db_name);
$cart_q = "SELECT card_name FROM products WHERE product_cat = 'HPC' LIMIT 12";
$result = $mysqli->query($cart_q) or die($mysqli->error);

$card_names = array();
while ( $row = $result->fetch_assoc() ){
    $card_names[] = $row['card_name'];
}

Выше будет создан массив $card_names => array('card_name1', 'card_name2' ... etc)

Теперь вы можете использовать foreach для перебора этого массива и создания выходного HTML. Из того, что я понял, вы хотите создать таблицу HTML с 4 ячейками на строку и одним именем карточки на ячейку.

echo '<table><tr>';

$i = 1;
foreach ( $card_names as $name ){
    echo "<td>$name</td>";

    if ( $i % 4 == 0) echo '</tr><tr>';

    $i++;
}
($i - 1) % 4 == 0 ? echo '</tr></table>'; : echo '</table>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...