Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Парсер запросов для БД.


Автор: Wowa 22.9.2005, 02:10
Есть к примеру запрос:
Код

SELECT * FROM vs_tree WHERE cid = 6 ORDER BY cid ASC LIMIT 1


Нужен парсер, который бы вставлял доп. условие. А именно: AND owner=2

Код

SELECT * FROM vs_tree WHERE cid = 6 AND owner=2 ORDER BY cid ASC LIMIT 1



Запросы могут быть совершено разные по структуре и не только на выборку, а и на удаление, апдейт и т.п.

Автор: Wowa 22.9.2005, 02:38
При Insert конечно же не надо.

Автор: Mal Hack 22.9.2005, 11:42
А просто регулярками не пробовал?

Автор: Wowa 22.9.2005, 11:42
Mal Hack не пробовал smile

Автор: Mal Hack 22.9.2005, 11:49
Код

<?php

 $sql = "SELECT * FROM `vs_tree` WHERE cid = 6 ORDER BY cid ASC LIMIT 1";

 $table = "vs_tree";
 $sql = preg_replace( "#(.+?FROM\s`vs_tree`.+?)(ORDER.+?)#i" , "\\1 AND owner=2 \\2" , $sql );

 print $sql;

?>

Автор: Wowa 22.9.2005, 11:52
спасибо, попробую

Автор: Wowa 22.9.2005, 14:16
Mal Hack при UPDATE не работает.
А также, если нет WHERE в запросе, то он его не добавляет

Автор: Mal Hack 22.9.2005, 14:44
Код

<?php

 $sql = "UPDATE `vs_tree` WHERE cid = 6 ORDER BY cid ASC LIMIT 1";

 $sql = preg_replace( "#((?:UPDATE|.+?FROM)\s`vs_tree`.+?)(ORDER.+?|$|LIMIT|GROUP BY)#i" , "\\1 AND owner=2 \\2" , $sql );

 print $sql;

?>

Автор: Sardar 22.9.2005, 22:53
Здесь есть парсер SQL: http://sourceforge.net/projects/txtsql

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)