Вот мой рабочий код для привата.. тупо вставить не получится, но может переделаешь под свои нужды.
<?
//$id - ид юзера, которому пишем.
//Сообщения---
$messages=Array();
if($User->id AND $User->id<>$id)
{
$res=$db->prepare("UPDATE messages SET readed='1' WHERE messages.user_to=? AND messages.user_from=?");
$res->execute(Array($User->id,$id));
include_once D.'/inc/func/pages.php';
//Сообщений на страницу
$on_page=40;
//Всего сообщений между пользователями---------
$res=$db->prepare("SELECT COUNT(*) AS cnt FROM messages
WHERE (messages.user_to=? AND messages.user_from=?) OR (messages.user_to=? AND messages.user_from=?);");
$res->execute(Array($User->id,$id,$id,$User->id));
if($rw=$res->fetch(A))$kolvo=$rw['cnt'];else $kolvo=0;
//---------------------------------------------
//Листинг страниц--------
$arr=pages_arr($kolvo,$on_page);
$start=$arr['start'];
$vivod['pages']=pages($arr['page'],$arr['max_page'],H.'/user'.$id.'&p={page}');
//-----------------------
//Получаем список сообщений-----
$res=$db->prepare("SELECT messages.*,users.name,users.id AS u_id,users.last_time
FROM messages,users
WHERE ((messages.user_to=? AND messages.user_from=?) OR (messages.user_to=? AND messages.user_from=?))
AND users.id=messages.user_from
ORDER BY messages.time DESC LIMIT $start,$on_page;");
$res->execute(Array($User->id,$id,$id,$User->id));
while($rw=$res->fetch(A))
{
$rw['time']=unix2human($rw['time']);
$rw['mes']=nl2br($rw['mes']);
$messages[]=$rw;
}
//------------------------------
}
//------------
?>
Добавлено через 01:19 сек.
Вот код отправки сообщения
<?php
//Отправляем сообщение юзеру---------------
if($User->id AND isset($_POST['message']) AND $User->id<>$id)
{
$message=str2base($_POST['message']);
$str_len=utf8_strlen($message);
if($str_len<2 OR $str_len>500)error('Сообщение может быть от 2х до 500 символов.');
$res=$db->prepare("INSERT INTO messages (user_to,user_from,mes,time) VALUES (?,?,?,UNIX_TIMESTAMP())");
$res->execute(Array($id,$User->id,$message));
loc('user'.$id);
exit;
}
?>