Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Wyrazenia Regularne
Forum PHP.pl > Forum > Przedszkole
ActivePlayer
Jak ze stronga zawierającego zapytanie mysql wyciągnąc nazwe tabeli??
cichy
Cytat
Jak ze stronga zawierającego zapytanie mysql wyciągnąc nazwe tabeli??

pić dopuki nie dojdziesz do nazwy tabeli..
wyjąć..
wypić reszte biggrin.gif
ActivePlayer
dobra inaczej... jak wyciągnąc 1 wyraz który jest napisany po "FROM " w stringu...
Sh4dow
Wiem ze strong moze zawierac sie w Kegach lub skrzynkach, ktore sa podobne to tabeli ale tak czy inaczej daleko im do tego. Wiec pis stronga az skrzynka stanie sie tabela, i wyciagnij kolejnego stronga z tabeli. i szukaj kolumn do upadlego... Rkingsmiley.png
ActivePlayer
Literowka a ludzie odrazu zaczynają sie smiac ;/ pomoze mi ktos questionmark.gif
Dabroz
No dobra, jeżeli picie strongów Ci nie odpowiada tongue.gif

  1. <?php
  2. if (preg_match('#FROM (w+)#si',$sql))
  3. $tabela=preg_replace('#FROM (w+)#si','1',$sql);
  4. ?>


[edit] już nie ma parse error tongue.gif
[edit2] już nie tylko na SELECT tongue.gif
ActivePlayer
Parse error

po 2 chodzi mi o dowolne zapytanie nie tylko o select tongue.gif

napisalem cos takiego:
  1. <?php
  2.  
  3. function nazwa_tabeli($string)
  4. {
  5.  
  6. $nazwa=explode(&#092;" \",$string);
  7. $j=0;
  8. while($nazwa[$j]!=&#092;"FROM\")
  9. {
  10. $j++;
  11. }
  12. $j++
  13. return $nazwa[$j];
  14. }
  15.  
  16.  
  17. ?>
MoD
A jak wyciągnąć nazwy pól tabeli międy SELECT a FROM questionmark.gif
ActivePlayer
  1. <?php
  2. function nazwa_tabeli($string)
  3. {
  4.  
  5. $nazwa=explode(&#092;" \",$string);
  6. $j=0;
  7. while($nazwa[$j]!=&#092;"SELECT\")
  8. {
  9. $j++;
  10. }
  11. $j++
  12. return $nazwa[$j];
  13. }
  14. ?>
tiraeth
Przykład stringa:
Kod
SELECT id, nazwa, tresc FROM tabela WHERE id>5


Wyciąganie nazwy kolumn:

  1. <?php
  2. // Zmienna $s_String to właśnie ten nasz nieszczęsny string do regexp'owania :)
  3.  
  4. $e_String = explode('FROM', $s_String); // Eksplodujemy
  5.  
  6. $e_Select = $e_String[0]; // Zmienna z nazwami kolumn jest tutaj, ale razem z 'SELECT'
  7. $e_Select = str_replace('SELECT', '', $e_Select); // Usuwamy SELECT ze stringa
  8. $e_Select = str_replace(' ', '', $e_Select); // Usuwamy spacje ze stringa
  9. $e_Columns = explode(',' $e_Select); // Eksplodujemy wszystkie nazwy kolumn
  10.  
  11. echo '</b>Wybrane kolumny:</b>';
  12. for($i=0; $i<count($e_Columns); $i++)
  13. {
  14. echo '<br />'$e_Columns[$i];
  15. }
  16. ?>

Powyższy kod wyświetli wszystkie nazwy kolumn w poniższej formie:
Cytat
Wybrane kolumny:
id
nazwa
tresc

Oczywiście można jeszcze sortować tablicę z nazwami kolumn smile.gif
ActivePlayer
A jak chce pobrac nazwe tabeli z jakiej pobieram questionmark.gif tongue.gif
FiDO
A mozna wiedziec po co Ci reverse-enginering zapytania SQL'owego? Mam dziwne wrazenie, ze probujesz cos zrobic pod gorke..
ActivePlayer
cachowanie bazy danych... przy INSERT/UPDATE/DELETE musze wyzucic wszystkie pliki cache dla zapytan danych tabel. Chce zeby byl full automat. w sumie juz skonczylem i dziala all ale musze nad wydajnoscią popracowac bo mam serialize 2x w pętlach i troche przymula...
MoD
Cytat(Tiraeth @ 2004-08-25 22:04:47)
Przykład stringa:
Kod
SELECT id, nazwa, tresc FROM tabela WHERE id>5


Wyciąganie nazwy kolumn:

  1. <?php
  2. // Zmienna $s_String to właśnie ten nasz nieszczęsny string do regexp'owania :)
  3.  
  4. $e_String = explode('FROM', $s_String); // Eksplodujemy
  5.  
  6. $e_Select = $e_String[0]; // Zmienna z nazwami kolumn jest tutaj, ale razem z 'SELECT'
  7. $e_Select = str_replace('SELECT', '', $e_Select); // Usuwamy SELECT ze stringa
  8. $e_Select = str_replace(' ', '', $e_Select); // Usuwamy spacje ze stringa
  9. $e_Columns = explode(',' $e_Select); // Eksplodujemy wszystkie nazwy kolumn
  10.  
  11. echo '</b>Wybrane kolumny:</b>';
  12. for($i=0; $i<count($e_Columns); $i++)
  13. {
  14.     echo '<br />'$e_Columns[$i];
  15. }
  16. ?>

Powyższy kod wyświetli wszystkie nazwy kolumn w poniższej formie:
Cytat
Wybrane kolumny:
id
nazwa
tresc

Oczywiście można jeszcze sortować tablicę z nazwami kolumn smile.gif

A co jeśli nie ma tam pól tylko "*" questionmark.gif
Można umieścić w funckji która zwraca wartość FALSE jeśli pomiędzy jest "*" a jak nie to tablice zawierającą nazwy pól. Tylko że jak ja próbowałem to nie wyciągało nic sad.gif
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.