2013-08-12 4 views
0
<?php 
    $db = new mysqli('localhost', 'root', 'root', 'chatting'); 
    $query = "SELECT * FROM user WHERE state = 1 AND getp = 0"; 
    $result = $db->query($query); 
    $num_result = $result->num_rows; 

    $mems = ""; 
    for ($i = 0; $i < $num_result; $i++) { 
     $row = $result->fetch_assoc(); 
     $mems = $row["userName"] . " " . $mems; 
     $query = "update `user` set `getp` = 1 where 'userName` = ".' $row["userName"] '; 
     $result = $db->prepare($query); 
    } 
    echo $mems; 
?> 

что я хочу Я хочу получить все записи, которые состоят из 1 и getp = 0, затем внутри цикла и для каждой записи я хочу изменить значение getp на 1, это правильно но не знаю, где это не так, простите за мой плохой английскиймоя база данных не обновлялась

+3

Повторите этот второй запрос '$ query'. Ваша цитата неверна - вам не хватает первого обратного пути в 'userName' для одного. Кроме того, вы просто готовите запрос и никогда не запускаете его. – andrewsi

+0

Какую ошибку вы принимаете? – maverabil

+0

@maverabilisim значение getp в моей базе никогда не меняется !! –

ответ

-2

УСАНОВИТЕ вашей команды обновления для:

$query = "update `user` set `getp` = 1 where `userName` = '". $row["userName"]. "'"; 
+0

Предупреждение: Неожиданный символ на входе: '' '(ASCII = 39) state = 1 в C: \ AppServ \ www \ Last \ chat \ getOnlineMembers.php в строке 11 Ошибка анализа: ошибка синтаксиса, неожиданный $ end в C: \ AppServ \ www \ Last \ chat \ getOnlineMembers.php в строке 15 –

+0

Я пропустил ". попробуйте еще раз. – maverabil

+0

thnax alot:) >> –

2

Вы забыли execute() оператор обновления ..

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

$query = $db->prepare("update `user` set `getp` = 1 where `userName` = :userName"); 
$query->bind_param(':userName',$row["userName"]); 
$result = $query->execute(); 
+0

Fatal Ошибка: вызов функции-члена execute() для не-объекта в C: \ AppServ \ www \ Last \ chat \ getOnlineMembers.php в строке 13 –

+1

Это должен быть способ сделать это. Вы уверены, что не выполняете есть опечатка? Если вызов 'bind_param' преуспел, тогда' execute' должен быть действительным. Этого невозможно добиться, если это не так. – tadman

+1

@ tadman Я согласен. Принятый ответ не защищает от инъекций, и я не могу понять, как он работал для OP без выполнения() .. –

-1

Зачем делать это в петле? Вы могли бы просто сделать UPDATE пользователь SET getp = 1 WHERE state = 1 AND getp = 0;

Захват с помощью $ i ++? Почему не while($row = $result->fetch_assoc()) { ... }?

Однако изменить запрос

$query = 'update `user` set `getp` = 1 where userName = "'. $row["userName"] .'"'; 

и не забудьте выполнить() его.

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