Используя mysql_fetch_assoc и mysql_result вместе?

#php #mysql #loops

#php #mysql #циклы

Вопрос:

У меня возникают большие проблемы при попытке использовать mysql_fetch_assoc и mysql_result вместе в одном PHP-скрипте.

Изначально (когда не использовалась mysql_result функция) Я получал требуемые значения базы данных, используя комбинацию mysql_query и mysql_fetch_assoc , и все было в порядке. Затем я добавил 2 строки в свой код, чтобы получить определенные значения поля ‘title’ с помощью mysql_result .

Теперь, если я запущу свой скрипт, как показано ниже, я получу только 1 результат, хотя есть 2 результата. Тогда, если я переместу свой do/while цикл вверх так, чтобы он находился между двумя другими блоками кода ( mysql_fetch_assoc и mysql_result строками), я получу желаемые 2 результата.

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

 // connect to DB and get values
mysql_select_db($database, $mywebsite);
$query_not_related_before = "SELECT  * FROM table  limit 2";
$not_related_before = mysql_query($query_not_related_before, $ mywebsite);
$row_not_related_before = mysql_fetch_assoc($not_related_before);


// Extract just the results from the title field (the problem area!)
$before_essayid4 = mysql_result($not_related_before,0, 'title');
$before_essayid5 = mysql_result($not_related_before,1, 'title');


// Display results etc
do { 
echo "<br />".$row_not_related_before['title']."<br />";} 
while ($row_not_related_before = mysql_fetch_assoc($not_related_before));
  

Пожалуйста, помогите,

Большое спасибо,

Дэвид

Ответ №1:

Я не уверен, решит ли это вашу проблему, но я думаю, вам следует « seek » вернуть результат обратно.

 mysql_data_seek ($not_related_before, 0)
  

Кроме того, проверьте предупреждение на странице mysql_result:

Вызовы mysql_result() не следует смешивать с вызовами других функций, которые имеют дело с результирующим набором.

Надеюсь, это поможет 😉

Ответ №2:

Вы получаете одну строку, потому что первая уже запрошена здесь:

 $row_not_related_before = mysql_fetch_assoc($not_related_before);
  

Итак, я думаю, вам нужно переместить указатель результата в начало:

 mysql_data_seek($not_related_before, 0);
// Display results etc
do { 
echo "<br />".$row_not_related_before['title']."<br />";} 
while ($row_not_related_before = mysql_fetch_assoc($not_related_before));
  

Ответ №3:

Более простым решением было бы использовать 2D-массивы, я всегда находил функции mysql немного громоздкими.

 <?php
$result = mysqli_query(db_connect(),$query);
$result_out = array();
        if(@mysqli_num_rows($result))
            while($row=mysqli_fetch_array($result,MYSQLI_ASSOC))$result_out[]=$row;
foreach($result_out as $row)
{
 echo "<br />".$row['title']."<br />"; 
}
?>
  

hth