PDA

Pogčedajte punu verziju : MySQL import - više upita iz fajla ili stringa


Ilija Studen
07. 07. 2006., 20:00
Pozdrav,

Da li neko ima funkciju ili parče koda koje može da učita SQL fajl i da ga izvrši (ili da izvrši više SQL naredbi koje se nalaze u stringu).

Znam da to ima phpMyAdmin, ali ja se u tom kodu baš i ne snalazim najsrećnije (nisam navikao da razmišljam tako "globalno"), a ovo je prilično česta stvar pa da vidim da li već neko ima nešto napravljeno.

zira
07. 07. 2006., 20:32
Evo je Ilija, trebalo bi da moze i komentare fino da preskoci.

//Preuzeto sa php.net, autor: sb at stephenbrooks dot org

function load_db_dump($file,$sqlserver,$user,$pass,$dest_db ) {
$sql=mysql_connect($sqlserver,$user,$pass);
mysql_select_db($dest_db);
$a=file($file);
foreach ($a as $n => $l) if (substr($l,0,2)=='--') unset($a[$n]);
$a=explode(";\n",implode("\n",$a));
unset($a[count($a)-1]);
foreach ($a as $q) if ($q)
if (!mysql_query($q)) {echo "Fail on '$q'"; mysql_close($sql); return 0;}
mysql_close($sql);
return 1;
}

Pretpostavka je da se redovi zavrsavaju sa ;\n
Nisam probao, ali mislim da ce da radi...

oliver
07. 07. 2006., 21:44
e, sql komentar moze biti i ##, tako da bi trebalo da se update-uje 5. linija:

foreach ($a as $n => $l) if (substr($l,0,2)=='--' || substr($l,0,2)=='##') unset($a[$n]);

ivanhoe
07. 07. 2006., 22:20
a moze i :


`mysql -u USER -pPASS ime_baze < fajl.sql`;


pod uslovom da imas exec privilegiju na serveru..

kodi
07. 07. 2006., 23:20
a moze i :


`mysql -u USER -pPASS ime_baze < fajl.sql`;


pod uslovom da imas exec privilegiju na serveru..


btw, ovo je mnogo brze, posebno ako radish 1000+ upita/upisa

zira
08. 07. 2006., 00:22
Naravno, mnogo je brze ako mozes exec, ali posto to nije garantovano da ce raditi svugdje, onda mozda bolje programski. Pretpostavljam da mu treba za install ili ugrade skript, pa onda brzina i nije toliko bitna koliko da to sigurno radi :)

Ilija Studen
09. 07. 2006., 16:07
Da, trebalo je za installer. Pošto uvek izbacim komentare iz šeme koristio sam najprostiji explode sa ";\n". Taj separator mi iz nekog misterioznog razloga uopšte nije pao na pamet :) Dobro je pa ova stvar uopšte ne mora da bude univerzalna već su sve stvari po direktnom kontrolom (komentari, sadržaj upita itd itd).