Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] String/zapytanie - parsowanie
Forum PHP.pl > Forum > PHP
windman
Witam,

Potrzebny mi parser zapytań podobnych do mysql, mój string: "UPDATE(tabela) SET(imie='janek' nazwisko='kowalski') WHERE(id=1)"
To co chcę otrzymac to poniższa tablica:
  1. <?php
  2. (
  3.    [UPDATE] => tabela
  4.    [SET] => Array
  5.        (
  6.            [IMIE] => janek
  7.            [NAZWISKO] => kowalski
  8.        )
  9.  
  10.    [WHERE] => Array
  11.        (
  12.            [id] => 1
  13.        )
  14.  
  15. )
  16. ?>
Zyx
O panie, i myślisz, że to w pięciu linijkach da się napisać? Parser znajdujący się w phpMyAdminie waży 125 KB. W PEAR można znaleźć jakąś klasę SQL_Parser, ale ona jest kiepsko udokumentowana, nierozwijana od 5 lat i w ogóle ciężko się rozeznać tak na pierwszy rzut oka, co ona dokładnie robi.

Ewentualnie zawsze możesz napisać go samodzielnie, ale to nie będzie łatwe zadanie smile.gif.
sowiq
Jeżeli zapytanie będzie miało złożoność podobną do zapytania podanego w pierwszym poście, to nie widzę problemu. Wystarczy kilka linijek i preg_match().
windman
Cytat(Zyx @ 4.03.2009, 13:27:15 ) *
O panie, i myślisz, że to w pięciu linijkach da się napisać? Parser znajdujący się w phpMyAdminie waży 125 KB. W PEAR można znaleźć jakąś klasę SQL_Parser, ale ona jest kiepsko udokumentowana, nierozwijana od 5 lat i w ogóle ciężko się rozeznać tak na pierwszy rzut oka, co ona dokładnie robi.

No i ok...
miałem nadzieję, że wyprowadzi mnie ktoś z błędu, że to wcale nie jest trudne i jest magiczna funkcja, która wszystko zrobi sama...

Pozdrawiam
Zyx
No niestety tongue.gif. Aczkolwiek jeśli potrzebujesz np. tylko pokolorować składnię (bo prawdę mówiąc, o ile nie piszesz własnego phpMyAdmina/systemu ORM to nie widzę żadnego innego powodu, dla którego interesowałby Cię taki parser), to do tego mogę Ci polecić bibliotekę GeSHi - koloruje SQL-a i całe mnóstwo innych rzeczy.
windman
Cytat(sowiq @ 4.03.2009, 13:31:40 ) *
Jeżeli zapytanie będzie miało złożoność podobną do zapytania podanego w pierwszym poście, to nie widzę problemu. Wystarczy kilka linijek i preg_match().

a jednak...
złożonośc dokładnie taka, dojdzie jeszcze LIMIT ORDERBY itp. to jednak nie komplikuje zadania.
To co najważniejsze to rozbjanie np: SET(imie='janek' nazwisko='kowalski')
na tablice:
  1. <?php
  2. ['SET']['imie'] = 'janek';
  3. ['SET']['nazwisko'] = 'kowalski';
  4. ?>


Co jeśli ktoś poda taki ciąg:
"UPDATE(tabela) SET(imie='jan')ek' nazwisko='kowalski') WHERE(id=1)"

tutaj parser pomysli, że imie='jan'... mysql_escape_string powinno pomóc... niestety wyrażenia regularne nie są moją mocną stroną...

Czy ktoś podejmie się próby napisania tych kilku linijek?

Cytat(Zyx @ 4.03.2009, 13:35:56 ) *
No niestety tongue.gif . Aczkolwiek jeśli potrzebujesz np. tylko pokolorować składnię (bo prawdę mówiąc, o ile nie piszesz własnego phpMyAdmina/systemu ORM to nie widzę żadnego innego powodu, dla którego interesowałby Cię taki parser)

Nie chcę kolorowac i nie piszę phpMyAdmina.. to co piszę to baza (za dużę słowo w tym przypadku) na plikach tekstowych.
Pomyślałem, że ładnie będzie wyglądało coś takiego:
  1. <?php
  2. $db = new txtDB();
  3. $query = &#092;"SELECT(*) FROM(tabela) WHERE(id='55') \";
  4. $db->query($query);
  5. ?>

Oczywiście można w metodzie query przekazac odpowiednie tablice ['nazwa_pola'] = 'wartosc' ale nie wygląda to już tak fanie...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.