2017-01-06 4 views
1

У меня есть некоторые функции, как это:Извлечение результирующего набора в виде массива

function doLegends($in_result) 
{ 
    global $legend_table; 
    while ($temp_row = mysqli_fetch_row($in_result)) 
    { 
     $legend_table[] = $temp_row; 
    } 
} 

Они добавляют каждую строку один-на-один в массив PHP. Есть ли способ сохранить набор результатов в виде массива за один шаг без необходимости получать каждую строку отдельно? Кроме того, есть ли преимущество в производительности? Благодарю.

Вот запрос.

SELECT l.legend_group, l.legend_description 
FROM legends as l 
WHERE l.record_id = in_record_id; 

record_id не является уникальным или первичным ключом, поэтому он возвращает несколько строк.

[править]

Это правильный синтаксис?

function doLegends($in_result) 
{ 
    global $legend_table; 
    $legend_table = mysqli_fetch_array($in_result); 
} 

Я получаю ошибку syntax error, unexpected '}' на последней строке.

[править]

Хорошо, ошибка синтаксиса была ложной положительной. Однако теперь функция mysqli_fetch_array возвращает только подмножество ожидаемого результата. Например, $legend_table должно иметь 6 строк, но функция возвращает только 2 строки. В идентификаторах SQL есть пробелы. Некоторые числа пропускаются из-за удаления некоторых строк. Может ли это иметь эффект?

[править]

Вот содержимое моего SQL таблицы:

legend_id,record_id,legend_group,legend_description 
896,180,1,"Unit Actions" 
897,180,2,Lenses 
898,180,4,Multiplayer 
899,180,5,Camera 
900,180,6,"Game Screens" 
901,180,8,"Game Commands" 

Но когда я подсчитать количество строк с помощью этого:

error_log("woot " . count($legend_table)); 

журнал регистрации ошибок показывает только woot 4 вместо woot 6.

+0

Можете ли вы показать нам запрос вы работаете? Возможно, вы сможете выполнять агрегацию по всем записям. –

+2

Если вы использовали PDO, вы могли бы просто сделать fetchAll() – e4c5

+0

Я добавил запрос на свой пост. И я не знаю, что такое PDO. – posfan12

ответ

2

Вы можете использовать mysqli_fetch_array, чтобы получить результат в виде массива или mysqli_fetch_assoc, чтобы получить результат в ассоциативном виде массива

+1

Может помочь, если вы дадите примеры OP, используя эти функции. Возможно также включить ссылки на php.net, где OP может посмотреть на функции с примерами php.net, например: [mysqli_fetch_array] (http://php.net/manual/en/mysqli-result.fetch-array. php) [mysqli_fetch_assoc] (http://php.net/manual/en/mysqli-result.fetch-assoc.php) – Nukeface

+1

Можете ли вы опубликовать код, где возникает проблема? mysqli_fetch_array ($ in_result) правильно используется. –

+0

Функция работает правильно в другом месте моего кода, поэтому проблема, вероятно, не связана. Я буду отмечать ваш ответ как правильный. Однако есть ли функция, затронутая пробелами в записях? Столбец идентификатора пропускается немного. Некоторые идентификаторы больше не используются, поскольку некоторые данные удалены. – posfan12

Смежные вопросы