для гуру - профи в php: проблема с layer ms sql

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
Ivantor

для гуру - профи в php: проблема с layer ms sql

Сообщение Ivantor »

имеется: phpbb + ms sql
проблема такая: при установке модов почти всегда возникает трудность, связанная с запросами: 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
....а вот этот из мода - падает с ошибкой на limit, хоть тресни (то есть limit на клиенте не удаляется):

Код: Выделить всё

SELECT * FROM phpbb_downloads WHERE approve = 1 ORDER BY cat, sort ASC LIMIT 0, 50
Насколько я проверил - инклудятся одни и те же файлы, обращение к базе идет одинаково (if ( !($result = $db->sql_query($sql)) ) ....)
ПОЧЕМУ вот этот код из 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);
					}
				}
			}
Ivantor

Сообщение Ivantor »

хм
больше 20 просмотров - и ни одного ответа :(
Интересно, я задал глупый вопрос, или не в том форуме, или профи сюда больше не ходют? :(

Вернуться в «Поддержка phpBB 2.0.x»