$query = mysql_query("SELECT * FROM test_base WHERE id = 1") or die(mysql_error());
$result = mysql_fetch_array($query);
foreach($result as $i) {
echo $i . "<br />";
}
Данные выводятся, но каждое значение выводится по два раза, например
1
1
name
name
9999999
9999999
и т. д.
при этом, если делаю обычный for цикл, то все работает нормально
$query = mysql_query("SELECT * FROM test_base WHERE id = 1") or die(mysql_error());
$result = mysql_fetch_array($query);
for ($i = 0; $i < sizeof($result); $i++) {
echo $result[$i] . "<br />";
}
выведет:
1
name
9999999
В чем подвох? :rolleyes:
И длину массива $result почему-то выводит 22, если после цикла сделать так
echo sizeof($result);
Хотя в таблице 11 колонок :unsure: Похоже на ассоциативный массив, но как сделать индексированный?
Спустя 23 минуты, 37 секунд (29.01.2011 - 12:19) aparion написал(а):
mysql_fetch_array возвращает каждое значение с числовым индексом и с индексом, равным названию колонки в таблице. Посмотри что содержится в $result и все увидишь.
Спустя 1 минута, 21 секунда (29.01.2011 - 12:20) Snus написал(а):
Ты сделай дамп своего $result и поймешь в чем дело.
Тебе поможет
Тебе поможет
$result = mysql_fetch_assoc($query);
Спустя 46 секунд (29.01.2011 - 12:21) Michael написал(а):
mysql_num_fields
Спустя 1 минута, 42 секунды (29.01.2011 - 12:23) Snus написал(а):
Michael
А это-то как горю поможет?
А это-то как горю поможет?
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 1 минута, 44 секунды (29.01.2011 - 12:24) goodguy написал(а):
Вопрос решен. Сделал так:
Просто не сразу понял, что надо копать в сторону mysql_fetch_array, а не циклов :)
$result = mysql_fetch_array($query, MYSQL_NUM);
Просто не сразу понял, что надо копать в сторону mysql_fetch_array, а не циклов :)
Спустя 2 минуты, 6 секунд (29.01.2011 - 12:26) Snus написал(а):
goodguy
А спасибо не сказал
А спасибо не сказал
![dry.gif](http://phpforum.ru/html/emoticons/dry.gif)
Спустя 2 минуты, 24 секунды (29.01.2011 - 12:29) goodguy написал(а):
Спасибо всем кто принял участие в теме
Но это решение я нашел самостоятельно, здесь. Никто ведь не сказал, что нужно добавить второй параметр в фетч эррэй
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Но это решение я нашел самостоятельно, здесь. Никто ведь не сказал, что нужно добавить второй параметр в фетч эррэй
![cool.gif](http://phpforum.ru/html/emoticons/cool.gif)
Спустя 2 часа, 7 минут, 55 секунд (29.01.2011 - 14:37) Michael написал(а):
Спустя 1 минута, 36 секунд (29.01.2011 - 14:38) Snus написал(а):
Michael
Зачем посылать еще один запрос в БД? Ему достаточно было ответа про assoc
Зачем посылать еще один запрос в БД? Ему достаточно было ответа про assoc
Спустя 15 минут, 17 секунд (29.01.2011 - 14:54) Michael написал(а):
какой второй запрос?
Спустя 4 минуты, 24 секунды (29.01.2011 - 14:58) Snus написал(а):
Michael
mysql_num_fields
Спустя 8 минут, 12 секунд (29.01.2011 - 15:06) twin написал(а):
Блин, ты хоть бы почитал ман. Michael всё показал.
Тут цикл вообще не нужен, есть для этого функция и даже ссыль на неё.
Тут цикл вообще не нужен, есть для этого функция и даже ссыль на неё.
Спустя 4 минуты, 7 секунд (29.01.2011 - 15:10) goodguy написал(а):
Хоть убейте не пойму чем mysql_list_fields() проще того варианта, чем использовал я ![unsure.gif](http://phpforum.ru/html/emoticons/unsure.gif)
И какой отношение эта функция вообще имеет к вопросу?
![unsure.gif](http://phpforum.ru/html/emoticons/unsure.gif)
И какой отношение эта функция вообще имеет к вопросу?
Цитата |
Retrieves the number of fields from a query. |
Я и так знаю, что их 11
Спустя 3 минуты, 30 секунд (29.01.2011 - 15:14) Snus написал(а):
twin
Торарищи, если вы подсказываете человеку, то лучше говорите как лучше.
Использовать
mysql_query() и mysql_num_rows() в одном запросе зачем надо?
Торарищи, если вы подсказываете человеку, то лучше говорите как лучше.
Использовать
mysql_query() и mysql_num_rows() в одном запросе зачем надо?
$query = "SELECT * FROM `your_table`";
$result = mysql_query($query) or die(mysql_error());
echo '<table border="1">';
while ( $row = mysql_fetch_assoc($result) ){
echo '<tr>';
foreach($row as &$val){
echo '<td>'.$val.'</td>';
}
echo '</tr>';
}
mysql_free_result($result);
echo '</table>';
Спустя 43 минуты (29.01.2011 - 15:57) twin написал(а):
Где ты в его коде увидел построчный разбор? Ему нужно перебрать поля. Тут второй цикл не нужен вообще.
Спустя 2 минуты, 10 секунд (29.01.2011 - 15:59) Snus написал(а):
twin
Ну так еще проще.
Ну так еще проще.
$query = "SELECT * FROM `your_table`";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($result);
echo '<table border="1">';
echo '<tr>';
foreach($row as &$val){
echo '<td>'.$val.'</td>';
}
echo '</tr>';
mysql_free_result($result);
echo '</table>';
Спустя 9 минут, 23 секунды (29.01.2011 - 16:08) Michael написал(а):
Цитата (Snus @ 29.01.2011 - 13:58) |
Michael <pre class="sh_sourceCode" rel="php">mysql_num_fields</pre> |
Эта функция не отсылает запрос к базе, а берет данные с пришедшего результата(с переменной $result)
Цитата (goodguy) |
И какой отношение эта функция вообще имеет к вопросу? |
Если так пишешь:
$res = mysql_query( "SELECT * from users" ) or die(mysql_error($c));
$row = mysql_fetch_row($res);
print_r($row);
Выведет:
Array
(
[0] => 1
[1] => a
)
Т.е. те данные из запрашиваемых столбцов помещаются в массив с численными индексами.
Чтобы их перебрать - надо например знать их кол-во. Тут работает эта функция. Ты перебираешь, используя foreach, но я где то встречал что foreach может не гарантировать нужный порядок.
Посмотри, что выведет mysql_fetch_array и поймешь почему два раза выводилось.
Это:
$result = mysql_fetch_array($query, MYSQL_NUM);
решение - то же верное, как и mysql_fetch_assoc
Спустя 1 час, 22 минуты, 19 секунд (29.01.2011 - 17:31) Snus написал(а):
Michael
Значит, не правильно сформулировал я. Зачем просчитывать кол-во строк , а потом циклом проходить, когда можно все сделать более быстро при помощи foreach?
Значит, не правильно сформулировал я. Зачем просчитывать кол-во строк , а потом циклом проходить, когда можно все сделать более быстро при помощи foreach?
Спустя 17 часов, 55 минут, 9 секунд (30.01.2011 - 11:26) Michael написал(а):
Цитата (Snus @ 29.01.2011 - 16:31) |
Michael Значит, не правильно сформулировал я. Зачем просчитывать кол-во строк , а потом циклом проходить, когда можно все сделать более быстро при помощи foreach? |
столбцов, а не строк ... ответ выше.
Спустя 8 минут, 56 секунд (30.01.2011 - 11:35) Dron19 написал(а):
Цитата (Snus @ 29.01.2011 - 14:31) |
Michael Значит, не правильно сформулировал я. Зачем просчитывать кол-во строк , а потом циклом проходить, когда можно все сделать более быстро при помощи foreach? |
я уже сто раз говорил, что нужно лучше как можно больше избегать foreach!
Спустя 5 минут, 34 секунды (30.01.2011 - 11:40) Snus написал(а):
Michael
Дико извиняюсь. Не доглядел, что ты mysql_num_fileds написал. Мне краем зрения показалось, что mysql_num_rows. Но это сути не меняет. assoc + foreach
Dron19
И почему же?
Дико извиняюсь. Не доглядел, что ты mysql_num_fileds написал. Мне краем зрения показалось, что mysql_num_rows. Но это сути не меняет. assoc + foreach
Dron19
И почему же?
Спустя 2 минуты, 44 секунды (30.01.2011 - 11:43) Dron19 написал(а):
Цитата (Snus @ 30.01.2011 - 08:40) |
Michael Дико извиняюсь. Не доглядел, что ты mysql_num_fileds написал. Мне краем зрения показалось, что mysql_num_rows. Но это сути не меняет. assoc + foreach Dron19 И почему же? |
он работает через чур уж медленно
Спустя 57 секунд (30.01.2011 - 11:44) Dron19 написал(а):
НО!!! Есть конечно такие ситуации, когда без него никак.... Нужно сделать всевозможное, чтобы обойтись без него
Это я советую
Это я советую
Спустя 57 секунд (30.01.2011 - 11:45) Snus написал(а):
Dron19
А что работает быстрее? Уже linker вроде проводил текст for, foreach и while - ну может на микросекунду отличается.
А что работает быстрее? Уже linker вроде проводил текст for, foreach и while - ну может на микросекунду отличается.
Спустя 1 минута, 30 секунд (30.01.2011 - 11:46) Dron19 написал(а):
нет, while самый быстрый из них. For неощутимо медленней, а foreach секунды на две на полноценной странице в интернете. Я тоже мерил, кстати во многих книгах это написано
Спустя 1 минута, 59 секунд (30.01.2011 - 11:48) Dron19 написал(а):
могу тебе скинуть одну из них
Спустя 2 минуты, 1 секунда (30.01.2011 - 11:50) Snus написал(а):
Dron19
Каждой ситуации - свое решение.
Каждой ситуации - свое решение.
Спустя 1 минута, 29 секунд (30.01.2011 - 11:52) Dron19 написал(а):
но лучше избегай таких ситуаций, то есть решай их более оптимальным способом
Спустя 5 минут, 38 секунд (30.01.2011 - 11:58) Snus написал(а):
Dron19
Только разница не в секундах, а в микросекундах различается.
Только разница не в секундах, а в микросекундах различается.
Спустя 7 минут, 53 секунды (30.01.2011 - 12:05) Snus написал(а):
Dron19
Да простит меня twin... Я ошибся, не linker тест проводил, а twin. Вот тебе ссыль. Пробуй у себя. И покончим с темой про foreach
Да простит меня twin... Я ошибся, не linker тест проводил, а twin. Вот тебе ссыль. Пробуй у себя. И покончим с темой про foreach