[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа в БД
Dinaris
Я делаю запрос к БД и получаю переменную $result, которую перебераю в дальнейшем foreach циклом. При повторном переборе данной переменной в цикле мне пишет ощибку "mysql_data_seek(): supplied argument is not a valid MySQL result resource". Что сделать, чтобы повторно изпользовать данную переменную?



Спустя 20 минут, 29 секунд (27.08.2011 - 18:08) inpost написал(а):
покажи код.

Спустя 3 минуты, 53 секунды (27.08.2011 - 18:12) Guest написал(а):
Dinaris
нельзя ее заново использовать, нужно сделать еще один запрос к базе, но лучше пересмотреть структуру кода, чтобы такой необходимости не было.

Спустя 55 минут, 44 секунды (27.08.2011 - 19:08) inpost написал(а):
Ты циклом делаешь какую-то обработку с result, а ты перепиши данные в массив, а потом используй. Банальный пример:
$res = mysql_query();
while($row = mysql_fetch_assoc($res))
$data[] = $row;

Как вариант причина такого, что у тебя указатель находится сейчас на самой последней записи, поэтому пройти её снова нельзя. Но есть у mysql функция, которая ставит указатель в самое начало, можешь и ею воспользоваться. Название точно посмотри в php.net , сам не использую, поэтому не помню её.

Спустя 36 минут, 46 секунд (27.08.2011 - 19:44) neadekvat написал(а):
Guest, прежде, чем сказать - подумай, а потом промолчи.

inpost, автор ее и использует, ага. Просто так названия функций в ошибках не упоминаются.

Dinaris, ты результат запроса где-то поришь. Либо делаешь это в функции, не объявляя переменную глобальной или статической.

Спустя 13 часов, 42 минуты, 1 секунда (28.08.2011 - 09:26) Dinaris написал(а):
Вот кусок кода, находящегося в файле вида (Kohana 3.0):

<div>
<
form action="mul" method="post">
<?php
session_start();
$question = ORM::factory('question_multiple')->find_all();

foreach($question as $row)
{
echo $row->Question.'<br>';


if (empty($_POST))
{
if (($row->RandomizeAnswers==1) and (empty($_POST)))
{
$answer = ORM::factory('answer_multiple')->where('QuestionID','=',$row->id)->order_by('', 'Rand()')->find_all();
}
else
{
$answer = ORM::factory('answer_multiple')->where('QuestionID','=',$row->id)->find_all();
}
$_SESSION['answer'] = $answer;
}
$count=0;

foreach($_SESSION['answer'] as $row1)
{
$count+=$row1->Calls;
?>
<input type="radio" name="answer" value="<?=$row1->id?>"
<?php

if ((isset($id)) and ($id==$row1->id))
{
echo "checked";
}
?>
><?=$row1->Answer?></input> <?=isset($res) ? "-------".$res.$row1->IsCorrect:""?><?=isset($rem) ? "---------".$rem:""?>
<?=
isset($a_calls) ? "------Answer showed ".$row1->Calls." times.":""?>
<br>
<?php
}
echo "<hr>";
}

?>
<input type="hidden" name="id" value="<?=$row->id?>"></input>
<
input type="submit" value="Check"></input>
</
form>
<?=isset($message) ? $message: ""?><br>
<?=isset($q_calls) ? "Question showed ".$count." times":""?>
<br>
<
a href="/test">Back</a>
</
div>


Я сохраняю рузультат запроса в сессию. Может из-за этого он пориться? Как решить данную проблему?

Спустя 1 час, 19 минут, 46 секунд (28.08.2011 - 10:46) neadekvat написал(а):
В сессию? Ты сохраняешь ресурс в сессию? о.О
Эм. Раз уж на то пошло, то применяй сериализацию и сохраняй результат запроса (строки) в виде массива или объекта, а не ресурс.
Просто чисто по логике - ресурс после завершения работы скрипта уничтожается, при повторной загрузке страницы обратиться к нему уже невозможно.

Спустя 8 часов, 19 минут, 45 секунд (28.08.2011 - 19:06) Dinaris написал(а):
Спасибо neadekvat !
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.