Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Izvrsavanje batch SQL komandi iz PHP-a

[es] :: PHP :: Izvrsavanje batch SQL komandi iz PHP-a

[ Pregleda: 1804 | Odgovora: 14 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

broker

Član broj: 2415
Poruke: 8521
*.vdial.verat.net



Profil

icon Izvrsavanje batch SQL komandi iz PHP-a06.11.2003. u 21:42

Nigde nisam mogao da nadjem gotovo kod koji izvrsava niz SQL komandi datih u jednom stringu, onako kako to radi mysql.exe pa sam na przinu napisao funkciju.

Pretpostavljam da ce jos nekome trebati.

Code:

//
// Izvrsi SQL skritu (niz SQL komandi datih u jednom stringu gde je 
// znak ; na kraju svake komande). Vraca true (1) ako je skripta izvrsena
// uspesno a false ako je doslo do greske. Podaci o gresci se mogu dobiti
// pozivom funkcija mysql_errno() i mysql_error()
//
function mysql_exec_batch ($p_query) {
  $query_split = preg_split ("/[;]+/", $p_query);
  foreach ($query_split as $command_line) {
    $command_line = trim($command_line);
    if ($command_line != '') {
      $query_result = mysql_query($command_line);
      if ($query_result == 0) { 
        break; 
      }; 
    };
  }; 
  return $query_result;
}
06.11.2003. u 21:42 

NetworkAdmin
Zoran Knezevic
programer u jednoj X kompaniji, radim na daljinu onli..
Beograd

Član broj: 4445
Poruke: 609
*.bbone.utic.net.ba.

Sajt: www.rentalio.com


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 09:21
zar to ne radi:
mysql_query($query);
10.11.2003. u 09:21 

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 2788
*.vdial.verat.net

Jabber: grakic@jabber.org
Sajt: blog.goranrakic.com


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 16:06
probaj da uradiš:
mysql_query('SELECT * FROM test;SHOW TABLES;');
ne radi, zar ne ;)

E ovaj kod gore ti daje mogućnost da izvršiš ceo .sql fajl, znači više query-a odjednom i vrlo je korisno.
http://sr.openoffice.org — slobodan kancelarijski paket, zamena za MS Office, na srpskom i engleskom, legalno bez troškova licenciranja
10.11.2003. u 16:06 

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.verat.net

Sajt: localhost


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 17:58
da, ideja je korisna, ali nije baš do kraja razrađena.

1) zaglupiće se ako neki red sadrži ;
2) takođe, neće se snaći sa komentarima (kakve obično dobijamo kada izvozimo baze)
3) ...
10.11.2003. u 17:58 

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 2788
*.vdial.verat.net

Jabber: grakic@jabber.org
Sajt: blog.goranrakic.com


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 21:20
Ja sam pisao ranije nešto tako, a onda sam olakšao sebi posao sa system() funkcijom i which mysql i mysql -h aaa.com -u user -p pass < backup/backup.sql što sasvim lepo šljaka, doduše u većini slučajeva na Unix sistemima zbog which alata, kao i preusmeravanje ulaza što je mogućnost sh, bash i još po nekih ljuski.

Može da se i ovakav kod lepo razradi, ali uvek postoji problem sa "nije_pokrivena_još_ovakva_kombinacija".
http://sr.openoffice.org — slobodan kancelarijski paket, zamena za MS Office, na srpskom i engleskom, legalno bez troškova licenciranja
10.11.2003. u 21:20 

_owl_
Centar - BG

Član broj: 318
Poruke: 990
*.drenik.net

Sajt: home.drenik.net/~owl


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 22:42
PhpMyAdmin -- pravo cudo, pored toga sto bach SQL mozete da uradite preko web-a, mozete i da uzmete kod koji radi taj isti batch. Opaki su ti open source projekti, svasta moze da se nauci/preuzme/prepravi.
Owl
10.11.2003. u 22:42 

broker

Član broj: 2415
Poruke: 8521
*.vdial.verat.net



Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a11.11.2003. u 09:47
Citat:
-zombie-:
1) zaglupiće se ako neki red sadrži ;
2) takođe, neće se snaći sa komentarima (kakve obično dobijamo kada izvozimo baze)


1. Nece se zaglupeti. Kod trimuje string koji je izdvojio kao komandu i ako dobije prazan string ne izvrsava ga.

2. Komentari ne smetaju osim u slucaju da neko zvekne ; u sam komentar.. mada, ovo nije namenjeno za all purpose and dumb users koriscenje nego da olaksa pisanje koda.

Ja vise volim da sto vise stvari resim SQL-om i ovo mi je zgodno resenje. Kad napravim komplikovan SQL skript koji radi posao (a to ume da bude poduzi niz komandi) samo ga iskopiram u PHP kod i izvrsim gornjom funkcijom. Ne samo sto je prakticno nego je i mnogo citljivije. Dodje skoro kao stored procedures :)

11.11.2003. u 09:47 

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.verat.net

Sajt: localhost


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a11.11.2003. u 17:51
Citat:
broker:
1. Nece se zaglupeti. Kod trimuje string koji je izdvojio kao komandu i ako dobije prazan string ne izvrsava ga.


INSERT INTO articles SET keywords='html ; css ; javascript';


11.11.2003. u 17:51 

broker

Član broj: 2415
Poruke: 8521
*.vdial.verat.net



Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a12.11.2003. u 08:13
ebiga... :) najde mi slabu tacku :)

Pa... siguran sam da se to moze resiti nekim prilicno jednsotavnim reg_exp, samo sto sam ja slab sa regexp. Ak se ne varam, ; se regularno moze pojaviti samo u stringovima pa bi moglo da se izvededa se pre podele na komande takvi slucajevi oznace a posle vrate.

Ako je neko rad da napise reg_exp koji nalazi ; u nizu znakova koji pocinju i zavrsavaju se sa ' odnosno " i zamenjuje ga sa ## neka posalje.
12.11.2003. u 08:13 

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.verat.net

Sajt: localhost


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a12.11.2003. u 12:50
nije tako jednostavno, i sumnjam da se nekim normalnim regexom mogu pokriti svi slučajevi.

znak navoda ' se može naći i u stringu, ali je onda eskejpovan sa \', pa onda, mogu se koristiti i dupli navodi ", pa onda kombinacije jednih i drugih do u besvest...


znači, ma koliko ja voleo umetnost regexa, mislim da je za ovo neophodan neki liniski parser sa stanjem (statefull). videću da li mogu da skuvam jedan uskoro...
12.11.2003. u 12:50 

broker

Član broj: 2415
Poruke: 8521
*.vdial.verat.net



Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a13.11.2003. u 11:55
Javi ako sta postignes, mada mislim da se ti problemi u dobroj meri mogu izbeci u samm sorsu. Najcesce se takvi stringovi moraju u stvari napraviti van SQL-a i proslediti kao parametri a niz SQL komandi je uglavnom baratanje s gotovim podacima u tabelama.
13.11.2003. u 11:55 

NetworkAdmin
Zoran Knezevic
programer u jednoj X kompaniji, radim na daljinu onli..
Beograd

Član broj: 4445
Poruke: 609
*.ppp-01.sa.lol.ba.

Sajt: www.rentalio.com


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a14.11.2003. u 23:13
onda je lijek dodavane "meta" komanti u sql file recimo
#explodemarker#
INSERT INTO articles SET keywords='html ; css ; javascript';
#explodemarker#
INSERT INTO articles SET keywords=lolita ; youngporn; underage';
#explodemarker#
14.11.2003. u 23:13 

_owl_
Centar - BG

Član broj: 318
Poruke: 990
*.vdial.verat.net

Sajt: home.drenik.net/~owl


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a15.11.2003. u 22:22
Ne treba komplikovati nesto sto je po svoj prilici jednostavno
(sto u celu pricu dodavati neke eksplozije, dinamite i ostalo).
Ako neko hoce da pravi svoje resenje od nule onda mora malo
da se udubi u problem i eventualno prouci slicna resenja koja
postoje (gorepomenuti PhpMyAdmin).
Regex-ima se takvi problemi ne resavaju (resavaju se konstruisanjem
parsera, potisnog automata ili cega vec).
Owl
15.11.2003. u 22:22 

_owl_
Centar - BG

Član broj: 318
Poruke: 990
*.vdial.verat.net

Sajt: home.drenik.net/~owl


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a15.11.2003. u 22:25
Zaboravih primer:
INSERT INTO articles
VALUES ('#explodemarker#', 'SELECT *;'bilo koji drugi marker');
Nije da hocu da miniram ideju ali ne ide to tako.

Owl
15.11.2003. u 22:25 

NetworkAdmin
Zoran Knezevic
programer u jednoj X kompaniji, radim na daljinu onli..
Beograd

Član broj: 4445
Poruke: 609
*.bbone.utic.net.ba.

Sajt: www.rentalio.com


Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a18.11.2003. u 08:58
Code:
function QueryUpload ($mysql_host, $mysql_user, $mysql_db, $mysql_password, $filename)
 {
  mysql_connect($mysql_host, $mysql_user, $mysql_password) || FatalError("Could not connect to SQL db");
  mysql_select_db($mysql_db) || FatalError("mysql_select_db :: failure");

  $fp = fopen($filename, "rb");
  $command = "";
  echo "Please wait...<br>\n";
  while (!feof($fp)) {
   $c = fgets($fp, 1500000);
   $c = chop($c);
   $c = ereg_replace("^[ \t]*#.*", "", $c);
   $command.=$c;
   if (ereg(";$",$command)) {
    $command=ereg_replace(";$","",$command);
        if (ereg("CREATE TABLE ", $command)) {
                $table_name = ereg_replace(" .*$", "", eregi_replace("^.*CREATE TABLE ", "", $command));
                echo "Creating table: [$table_name] ...<br>\n";
        flush();
        }
    mysql_query($command);
    $myerr = mysql_error ();
        if (!empty($myerr))
        {
     echo $myerr;
         break;
        } 
    $command="";
    flush();
   }
  }
  mysql_close ();
  fclose($fp);
  if (!empty($myerr))
     return false;
  return true;   
 } 


Evo na svjetlo javnosti ova funkcija pa da vidimo ima li bugs :)
18.11.2003. u 08:58 

[es] :: PHP :: Izvrsavanje batch SQL komandi iz PHP-a

[ Pregleda: 1804 | Odgovora: 14 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.