Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] String/zapytanie - parsowanie, Jak robi to phpmyadmin?
windman
post 3.03.2009, 16:10:35
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował windman 4.03.2009, 12:43:11
Go to the top of the page
+Quote Post
Zyx
post 4.03.2009, 13:27:15
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
sowiq
post 4.03.2009, 13:31:40
Post #3





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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().
Go to the top of the page
+Quote Post
windman
post 4.03.2009, 13:32:04
Post #4





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Zyx
post 4.03.2009, 13:35:56
Post #5





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
windman
post 4.03.2009, 13:45:45
Post #6





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


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...

Ten post edytował windman 4.03.2009, 13:50:14
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 10:47