我正在构建一个聊天应用程序并遇到一些问题。首先,我希望用户登录后聊天开始从数据库加载。
从 ajax 调用的 db 获取整个聊天的函数
function getChatData(){
global $mysqli;
//echo $lastinseted= $mysqli->insert_id();
$sql = "SELECT `chat`.`message`,
`users`. `username`,
`chat`.`timestamp`
from `chat` JOIN `users` ON (`chat`.`user_id`=`users`.`user_id`)
ORDER BY `chat`.`timestamp` DESC limit 15";
try{
if($stmt=$mysqli->prepare($sql)){
echo returnJson($stmt);
$stmt->close();
$mysqli->close();
}else{
throw new Exception("An error occured while fetching record data");
}
}catch(Exception $e){
log_error($e, $sql, null);
echo 'fail';
}
}
这是回调函数:
function getChatCallback(data){
var h='';
for(var i=0, l=data.length;i<l;i++){
h+=data[i].username+' says: '+data[i].message+'<span style="color:gray"> at the time '+data[i].timestamp+'</span><br/>';
}
$('.messages').html(h);
setTimeout(getChat,1500);
}
这是将新消息插入数据库的函数,一旦用户点击回车就会调用它,它也被 ajax 调用调用:
function putChatData($message,$room,$user_id){
global $mysqli;
$sql = "INSERT INTO `chat`
(`message`,`timestamp`,`room`,`user_id`)
VALUES (?,?,?,?)";
$timestamp = gmdate("Y-m-d H:i:s");
try{
if($stmt=$mysqli->prepare($sql)){
$stmt->bind_param('ssii',$message,$timestamp,$room,$user_id);
$stmt->execute();
$stmt->close();
$mysqli->close();
}else{
throw new Exception("An error occured while fetching record data");
}
}catch(Exception $e){
log_error($e, $sql, null);
echo 'fail';
}
}
现在的问题是我可以将新消息插入数据库,但是获取聊天的第一个函数会在用户登录之前带来所有聊天,包括旧的聊天。我尝试使用时间戳或最后一个插入 ID,但没有不要和我一起工作。