if (isset($_POST['update'])){
$db=mysqli_connect("localhost","****","****","****");
$lasttime = isset($_POST['timestamp']) ? $_POST['timestamp'] : 0;
while (1){
sleep(1);
clearstatcache();
$mresult = mysqli_query($db,"SELECT * FROM tblchat WHERE msg_datetime > $lasttime");
if (!empty($mresult)){ break; }
}
$msgs = array();
while ($row = mysqli_fetch_object($mresult)) { $msgs[] = $row; }
mysqli_free_result($mresult);
$response = array();
$response['msgs'] = $msgs;
echo json_encode($response);
flush();
mysqli_close($db);
exit();
}
Код - это сервер для долгого опроса с клиентом. Если запрашивается обновление, циклы while проверяют любые новые сообщения, полученные после отметки времени, отправленной с запросом на обновление. Если он найден, он помещает результат в массив и возвращает его клиенту. В результате получается что-то вроде этого [msgs:[{msg_from:"",msg_to:"",msg:"",msg_datetime:""},{msg_from:"",msg_to:"",msg:"",msg_datetime:""}]]
MYSQLi SELECT Fetch Object
Код работает отлично в первый раз и отправляет все последние сообщения, хорошо инкапсулированные, но затем снова отправляет пустой массив сообщений. Пожалуйста, направляйте меня.
Приятная инъекция SQL –
Приятно видеть, как люди переходят на MySQLi или PDO, и все же они продолжают вставлять свою переменную непосредственно в запрос вместо правильного использования подготовленных операторов; ( – Prix
не могли бы вы просто переписать два запроса в моем коде правильно , я хочу научиться однажды навсегда, как предотвратить SQL-инъекцию. –