2012-04-10 2 views
0

Я пытаюсь захватить несколько строк с помощью этих строк из базы данных MySQL:MySQL Query захватывает только одну строку вместо нескольких. Зачем?

$msg_sql = "SELECT * FROM ".TABLE_PREFIX."quotes ORDER BY rand(curdate()) LIMIT 3"; 
$msg_res = mysqli_fetch_assoc(mysqli_query($link, $msg_sql)); 
print_r($msg_res); 

Однако, я получаю только 1 строку назад. Что:

Array ([id] => 1 [message] => test_message [Link] => link here) 

Я хотел бы получить несколько строк (так несколько идентификаторов)

Пожалуйста, скажите мне, что я делаю неправильно. Я все еще новичок в MySQL.

+2

Не причина, по которой вы получаете только одну строку, но _do not_ call 'mysqli_query()' in 'mysqli_fetch _ *()'. Вызовите его и сохраните его ресурс в переменной, проверьте FALSE на эту переменную, затем выберите. –

+0

Просто любопытно, почему это хорошая практика? Спасибо. Это приводит к плохому кэшированию? –

+0

Вызов запроса внутри извлечения не позволяет проверить наличие ошибок. И хотя это может работать (без проверки на ошибки), когда ожидается только одна строка, она не может использоваться вообще при извлечении нескольких строк в цикле 'while', что вы будете делать большую часть времени, потому что он повторно запускает запрос на каждой итерации цикла. –

ответ

4

Вы должны цикла один раз для каждой строки вы запрашиваете.

$result = mysqli_query($link, $msg_sql); 
while ($item = mysqli_fetch_assoc($result)) { 
    print_r($item); 
} 
+0

Спасибо! это сработало отлично. Извините за то, что вы новичок в MySQL. Люди, подобные вам, которые терпеливы с новичками, делают это сообщество таким замечательным! :) –

1

Вы должны перебрать свои результаты:

$results = mysqli_query($link, $msg_sql); 
while ($msg_res = mysqli_fetch_assoc($results)) 
{ 
    print_r($msg_res); 
} 
+1

Это будет повторять запрос каждого цикла цикла. – Interrobang

+1

Вы вызываете запрос на каждой итерации цикла! –

+0

Я обновлялся, когда вы голосовали. Пересмотрите свой голос. –

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