2014-03-12 2 views
0

Мне нужно получить и обновить все результаты запроса, я получу все результаты, но он обновляет только первый результат, почему? Заранее спасибо.как использовать все результаты запроса mysql в php

$result=mysql_query(" SELECT text FROM sess WHERE dest='$name' AND mitt='$mitt' AND read='0' ORDER BY idm "); 
while($row = mysql_fetch_array($result)){ 
     $messages[]=$row[$i]; 
     $mess= mysql_real_escape_string($row[$i]); 
     mysql_query(" UPDATE sess SET read='1' WHERE dest='$name' AND mitt='$mitt' AND text='$mess' "); 
     $i++; 
     } 
+0

** MySQL _ *** ** есть ** осуждается использование MySQLi или PDO. –

ответ

3

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

$result=mysql_query(" SELECT text FROM sess WHERE dest='$name' AND mitt='$mitt' AND read='0' ORDER BY idm "); 
while($row = mysql_fetch_array($result)){ 
    $messages[]=$row[0]; 
    $mess= mysql_real_escape_string($row[0]); 
    mysql_query(" UPDATE sess SET read='1' WHERE dest='$name' AND mitt='$mitt' AND text='$mess' "); 
    $i++; 
} 

Примечание:, что функции, которые вы используете mysql_* устарели. Есть несколько альтернатив, mysqli_* является прямой заменой. Читать more here

Примечание 2: Используйте идентификатор сообщения, чтобы установить сообщение прочитанным. Использование содержимого текста неэффективно.

UPDATE sess SET read='1' WHERE message_id = $messageId 
+0

Привет, он работает! –

+0

@lbu; Каково ваше мнение? По моему мнению, он хочет выбрать некоторые записи и, наконец, обновить 'read = 1' для каждой записи и получить количество обновленных результатов. Поэтому почему бы не просто запустить 'UPDATE sess SET read = 1 WHERE dest = '$ name' AND mitt = '$ mitt' AND read = '0'" 'и, наконец, получить сумму' mysqli_affected_rows'. Согласны ли вы? – Javad

+0

Возможно чтобы установить все сообщения, отображаемые как прочитанные. Лучший способ получить ответ - запросить OP – Ibu

0

Почему бы просто не сделать

UPDATE sess SET read='1' WHERE dest='$name' AND mitt='$mitt' AND read='0' ? 
+0

... и прочитайте их после (или до) команды update. Это более эффективно, чем многие команды обновления. – viljun

+1

Не знаю, почему это занижено. Не отвечает на личный вопрос, но обеспечивает отличную (даже лучшую) альтернативу неработочному коду. Однако можно использовать еще несколько объяснений. – GolezTrol

0

попробовать что:

while($row = mysql_fetch_array($result)){ 

    mysql_query(" UPDATE sess SET read='1' WHERE dest='$name' AND mitt='$mitt' AND text='".$row['text']."' "); 

    } 

или это:

while($row = mysql_fetch_assoc($result)){ 
$id = mysql_real_escape_string($row['id']); 
mysql_query("UPDATE sess SET read='1' WHERE `id` = '$id' "); 
} 
-1

Попробуйте

$result=mysql_query("SELECT id ,text FROM sess WHERE dest='$name' AND mitt='$mitt' AND read='0' ORDER BY idm "); 
while($row = mysql_fetch_assoc($result)){ 
    $messages[]=$row['text']; 
    $id = mysql_real_escape_string($row['id']); 
    mysql_query("UPDATE sess SET read='1' WHERE `id` = '$id' "); 
    $i++; 
} 
+0

. Предполагается, что существует 'id', не объясняет, что происходит или почему это лучше. – GolezTrol

+0

@GolezTrol Если вы читаете его вопрос заключается в том, что он хочет обновить каждую запись результата выбора как 'read = 1', поэтому в то время как он может обновить только эту конкретную запись, выбрав по id – Javad

+0

Если есть идентификатор. Откуда вы понимаете, что существует' id'? Может быть, есть * должен * быть .. – GolezTrol

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