Как проиндексировать результат запроса MySQL как массив массива?

#php #mysql

#php #mysql

Вопрос:

Если мне нужно выбрать и использовать информацию о каждом элементе таблицы в базе данных, процедура будет следующей:

 $query = "...mySql query...";
$query_result = mysql_query($query) or die (mysql_error());
  

Затем, если бы я хотел получить доступ к полям результата, я бы использовал функцию mysql_fetch_array() и получил к ним доступ следующим образом:

 $query_result_array = mysql_fetch_array($query_result);
echo $query_result_array['field_1'];
....
echo $query_result_array['field_i'];
....
  

Но поскольку запрос может возвращать больше элементов, я хотел бы получить доступ к каждому из них с помощью массива, индексированного от 0 до mysql_num_rows($query_result).

В качестве примера:

 echo $query_result_array['field_i'][0];
....
echo $query_result_array['field_i'][mysql_num_rows($query_result)];
  

следует печатать для каждого выбранного элемента таблицы значение поля i.

Есть ли функция, которая сделает эту работу за меня? Если нет, какие-либо предложения о том, как это сделать?

Заранее спасибо за помощь.

Ответ №1:

Это может быть альтернативой

 $res = mysql_query("..SQL...");
$arr = array();
while ($row = mysql_fetch_assoc($res)) {
    $arr[] = $row;
}
var_dump($arr);
  

Или

 $res = mysql_query("..SQL...");
for
(
    $arr = array(); 
    $row = mysql_fetch_assoc($res); 
    $arr[] = $row
);
var_dump($arr);
  

Комментарии:

1. когда закончится цикл while?

2. After извлекает все результаты из вашего SQL-запроса. Когда mysql_fetch_assoc возвращает false означает, что больше нет строк, затем завершается.

Ответ №2:

Я не думаю, что есть такой метод; вы должны сделать это самостоятельно.

Ответ №3:

попробуйте что-то вроде:

 $res = mysql_query("..mySql query...");
$arr = array();
while ($row = mysql_fetch_assoc($res)) {
    $query_result_array[] = $row;
}
  

затем вы получаете доступ к своим данным следующим образом:

 echo $query_result_array[0]['field_i'];
  

Ответ №4:

основываясь на 2 предыдущих ответах, эти авторы предполагают, что обычный автор SO знаком с такой вещью, как создание функции

 function sqlArr($sql) { return an array consists of 
  $ret = array();
  $res = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
  if ($res) {
    while ($row = mysql_fetch_assoc($res)) {
      $ret[] = $row;
    }
  }
  return $ret;
}

$array = sqlArr("SELECT * FROM table");
foreach ($array as $row) {
  echo $row['name'],$row['sex'];
}
  

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