получите массив строк с результатом mysqli

Я должен получить все строки от объекта результата. Я пытаюсь создать новый массив, который будет содержать все строки.

Вот мой код:

$sql = new mysqli($config['host'],$config['user'],$config['pass'],$config['db_name']);
if (mysqli_connect_errno())
{
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
$query = "SELECT domain FROM services";
$result = $sql->query($query);           
while($row = $result->fetch_row());
{
    $rows[]=$row;
}
$result->close();
$sql->close();
return $rows;

$rows как предполагается, новый массив, который содержит все, строки, но вместо этого я получаю пустой массив.

Какие-либо идеи, почему это происходит?

7
задан Dharman 25 November 2019 в 09:41
поделиться

1 ответ

Новейшие версии mysqli имеют некоторые улучшения, которые могут упростить такую задачу.

Первый, всех, существует полезная функция для возврата массива со всеми строками, возвращенными запросом, mysqli_fetch_all()
Это означает в случае, если Вам нужен простой перечислимый массив, код был бы намного более простым:

$query = "SELECT domain FROM services";
$result = $sql->query($query);     
return $result->fetch_all(MYSQLI_ASSOC);

Однако, если необходимо использовать некоторый столбец для индексации полученного массива, Вам все еще нужен некоторое время цикл как это:

$query = "SELECT domain FROM services";
$result = $sql->query($query);
$data = [];
while($row = $result->fetch_assoc()) {
  $data[$row['id']]=$row;
}

Примечание, что необходимо всегда инициализировать массив перед заполнением его, потому что такая переменная могла уже существовать.

кроме того, mysqli_result класс теперь Проходим. Это означает, что можно использовать его в цикле foreach сразу же, как будто это - массив, содержит все строки от базы данных:

$query = "SELECT domain FROM services";
$result = $sql->query($query);
foreach($result as $row) {
    echo $row['name'];
}

, Но это - на самом деле просто сахар синтаксиса некоторое время цикл - Вы не можете получить доступ к значениям этого "массива" значения непосредственно, который делает эту функцию из небольшого использования на самом деле.

Обязательные примечания.

Этим вопросом является старое десятилетие, и способ, которым установлена связь, и запрос выполняется, и в вопросе и в принятом ответе, obsoleted и осужденный в наше время.

, Когда связь установлена, существует несколько вещей иметь в виду. Я записал статья , которая предоставляет корректное подчеркивание соединения в качестве примера по следующим проблемам:

  • надлежащее режим сообщения об ошибке должен быть установлен
  • надлежащее , набор символов должен быть установлен
  • , никакой ручной код сообщения об ошибке никогда не должен использоваться (как die(mysqli_connect_error()))
  • , связь должна быть установлена только однажды , в отдельном файле, и затем просто включена в каждый сценарий, для которого нужно взаимодействие базы данных. в случае, если код базы данных используется в функции, переменная соединения должна быть передана в как параметр функции.

, Когда запрос выполняется, существует несколько вещей иметь в виду:

  • , когда, по крайней мере, единственная переменная используется в запросе, , подготовленный оператор должен использоваться вместо mysqli_query()
  • , никакой ручной код сообщения об ошибке никогда не должен использоваться (как die(mysqli_error())). благодаря надлежащему ошибочному режиму mysqli сообщит обо всех ошибках автоматически.
2
ответ дан 6 December 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: