проблема такая: при установке модов почти всегда возникает трудность, связанная с запросами: ms sql "не понимает" limit, в результате - некоторые (не все!) sql-запросы дают ошибку.
Вообще эта проблема в стандартной поставке phpbb по идее обходится так:
в файле mssql.php при наличии limit запрос модифицируется под ms sql - то есть убирается limit.
Но почему-то аналогичные же запросы из модов частенько не модифицируются. Я не знаю php, и не могу понять, что происходит.
Подскажите плиз, почему вот этот запрос из viewtopic.php отрабатывается нормально (то есть limit удаляется, и ms sql его проглатывает)
Код: Выделить всё
SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid FROM phpbb_posts p, phpbb_users u, phpbb_posts_text pt WHERE p.topic_id = 3091 AND pt.post_id = p.post_id AND u.user_id = p.poster_id ORDER BY p.post_time ASC LIMIT 0, 15
Код: Выделить всё
SELECT * FROM phpbb_downloads WHERE approve = 1 ORDER BY cat, sort ASC LIMIT 0, 50
ПОЧЕМУ вот этот код из mssql.php может обрабатывать названные два запроса с разным исходом?
Код: Выделить всё
if( preg_match('#^SELECT(.*?)(LIMIT ([0-9]+)[, ]*([0-9]+)*)?$#s', $query, $limits) )
{
$query = $limits[1];
if( !empty($limits[2]) )
{
$row_offset = ( $limits[4] ) ? $limits[3] : "";
$num_rows = ( $limits[4] ) ? $limits[4] : $limits[3];
$query = 'TOP ' . ( $row_offset + $num_rows ) . $query;
}
$this->result = @mssql_query("SELECT $query", $this->db_connect_id);
if( $this->result )
{
$this->limit_offset[$this->result] = ( !empty($row_offset) ) ? $row_offset : 0;
if( $row_offset > 0 )
{
@mssql_data_seek($this->result, $row_offset);
}
}
}