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: 3907 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

broker

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



+11 Profil

icon Izvrsavanje batch SQL komandi iz PHP-a06.11.2003. u 21:42 - pre 249 meseci
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;
}
 
Odgovor na temu

NetworkAdmin

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



Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 09:21 - pre 249 meseci
zar to ne radi:
mysql_query($query);
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 16:06 - pre 249 meseci
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.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

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

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

Sajt: localhost


+5 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 17:58 - pre 249 meseci
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) ...
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 21:20 - pre 249 meseci
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.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

_owl_

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



+3 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a10.11.2003. u 22:42 - pre 249 meseci
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
 
Odgovor na temu

broker

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



+11 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a11.11.2003. u 09:47 - pre 249 meseci
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 :)

 
Odgovor na temu

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

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

Sajt: localhost


+5 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a11.11.2003. u 17:51 - pre 249 meseci
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';


 
Odgovor na temu

broker

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



+11 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a12.11.2003. u 08:13 - pre 249 meseci
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.
 
Odgovor na temu

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

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

Sajt: localhost


+5 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a12.11.2003. u 12:50 - pre 249 meseci
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...
 
Odgovor na temu

broker

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



+11 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a13.11.2003. u 11:55 - pre 249 meseci
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.
 
Odgovor na temu

NetworkAdmin

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



Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a14.11.2003. u 23:13 - pre 248 meseci
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#
 
Odgovor na temu

_owl_

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



+3 Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a15.11.2003. u 22:22 - pre 248 meseci
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
 
Odgovor na temu

_owl_

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



+3 Profil

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

Owl
 
Odgovor na temu

NetworkAdmin

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



Profil

icon Re: Izvrsavanje batch SQL komandi iz PHP-a18.11.2003. u 08:58 - pre 248 meseci
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 :)
 
Odgovor na temu

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

[ Pregleda: 3907 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

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