Autor Zpráva
Senky
Profil
Zdravím.
Netuším ako na to, aj keď som veľa hľadal po internete. Ako by som mohlo rozdeliť sql príkaz, pričom neviem, koľko príkazov v sebe obsahuje (vždy je to INSERT...; INSERT...; ...). Má to totiž viac ako 1MB, a môj hosting má práve 1MB a navyšovať limit neplánuje (práve preto tu píšem).
Jednoducho ja "ukradnem" sql príkaz z inej domény a potom sa ho snažím vložiť do databázy, avšak zastavím ma to kvôli limitu. Bolo by možné nejako sql príkaz rozdeliť (napríklad do array...) a potom ho postupne vkladať do databázy (cet for, alebo while ma napadá)?
Ďakujem za každý nápad...
Kajman_
Profil *
Nejjednodušší je mít hosting se ssh přístupem. Pak se tam jen nahraje a spustí přímo na serveru. Ale v php to také můžete rozkouskovat.
fuckin
Profil
ano ssh je nejlepsi, ale bohuzel jen malo lidi s tim umi zachazet. U nasich hostingu je to temer tabu, proto hostuju v zahranici.

Omezeni 1mb? A na co se vztahuje? Na importovany soubor v phpmyadmin?
Jaky mas proboha hosting?
Me db maji i pres 50mb a ja to akorat rozkouskuju treba na 4 casti a dam to tam postupne.
Senky
Profil
Mám elbiahosting.sk. Ten 1mb je iba pre sql cez mysql_query, teda cez php skripty. Cez phpmyadmin toho môžem vložiť oveľa viac... Vedeli by ste mi teda poradiť, ako môžem php skriptom rozdeliť sql a spostupne ho vkladat?
fuckin
Profil
a kdyz mas sql tak proc ho tam nedas pres phpmyadmin?

A jestli to delas pres php tak tam by preci zadne omezeni by nemelo byt. Mas tam prece vice mysql_query, takze to omezeni je blbost. Co ti to pise?
Senky
Profil
Tak ja to nechcem cez phpmyadmin, lebo to potrebujem stále každý deň aktualizovať automaticky.
A vyzerá to takto:
INSERT INTO table VALUES (......);
INSERT INTO table VALUES (......);
INSERT INTO table VALUES (......);
INSERT INTO table VALUES (......);
To je to, čo dostanem od cudzieho serveru, nie
mysql_query(INSERT INTO table VALUES (......));
mysql_query(INSERT INTO table VALUES (......));
mysql_query(INSERT INTO table VALUES (......));
mysql_query(INSERT INTO table VALUES (......));
Kebyže dostanem toho, tak to nie je problém. A mysql_error mi dáva toto:
Got a packet bigger than 'max_allowed_packet' bytes
fuckin
Profil
aha, no tak kazdy prikaz rozdel do pole tim strednikem explode(";",$dotaz); a pak v nejakem cyklu, treba for bude
mysql_query($dotaz[$i]);
Senky
Profil
Ďakujem za radu, pokúsim sa to nejako dať do kopy. Ak budú problémy, hádam nebude problém sa ozvať
Ďakujem ešte raz...
Senky
Profil
Mám ešte jeden problém. Neuvedomil som si, že v príkazoch sa môže tiež vyskytovať ;, čo mi rozdelilo príkaz na nechcené časti. Vyriešil som to tým, že som dal namiesto
explode(";",$dotaz);

toto:
explode(');', $dotaz);

Avšak tým pádom potrebujem pridať do query ešte ). Urobil som to takto:
mysql_query($explode[$i] . ')') or die(mysql_error());

Avšak hlási mi to túto chybu:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
Z čoho mi vyplynulo, že chtiac-nechtiac, pridáva to pred a po zátvorke aj úvodzovky. Je nejaké možnosť sa ich zbaviť?
Ďakujem...
fuckin
Profil
nechapu jake uvozovky. Vypis to pomoci print_r($obsah); a pak sem napis co ti to vyplivne. Az po zpracovani, pred zavolanim v mysql_query.
Senky
Profil
To mi je jasné:
INSERT INTO `world_map` VALUES (72202,-289,310,1,81340,'Nová Dedina',2005,'Benchpress',68,'SPP',2)
Dostanem pekný príkaz, avšak ak to dám takto:
mysql_query($explode[$i] . ')') or die(mysql_error());
, tak to vyhodí chybu napísanú vyššie. Netuším, kde môže byť chyba...
Celý príkaz vyzerá takto:
$explode = explode(');', $prepare);
for($i=0; $i <= sizeof($explode); ++$i)
{
  mysql_query($explode[$i] . ')') or die(mysql_error());
}
fuckin
Profil
jestli vidim dobre tak v tom sql prikazu zavorka na konci JE.
Tak proc ji tam znovu pridavas?
Senky
Profil
Toto
INSERT INTO `world_map` VALUES (72202,-289,310,1,81340,'Nová Dedina',2005,'Benchpress',68,'SPP',2)
je výsledok po tomto
print_r($explode[$i] . ')');
Preto ju tam pridávam. Ináč mi vypíše túto chybu (mysql_error())
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Pretože tam na konci chýba zátvorka. Je to jasné z tohto:
print_r($explode[$i]);
Dá mi to toto:
INSERT INTO `world_map ` VALUES (72202,-289,310,1,81340,'Nová Dedina',2005,'Benchpress',68,'SPP',2
bez zátvorky...
fuckin
Profil
to je divne, zkus tu zavorku pridat v normalnich uvozovkach, ne pomoci jednoduchych ' .

Jestli to nepomuze tak uz fakt nvm, nejak napevno tam hodit uvozovky
mysql_query("${explode[$i]})");...tipuju ze to bude syntax error :D...nemam moznost to vyzkouset sorry :)
Senky
Profil
Bohužiaľ, ani jedna z možností nefunguje. Napadlo ma ešte zameniť najprv ); za niečo, čo sa v text určite nevyskytuje, potom sparsovať každé ";" na niečo iné (napríklad "<:>" ), potom zase ); naspäť a tak to uložiť do databázy. Následne vytiahnuť z databázy všetko, nájsť <:> a sparsovať to naspäť na ;. Uf... Uvidím ako to vyjde...
Senky
Profil
Uf. A toto je zas čo? (odpoveď mysql_error()):
Query was empty
Aké empty? Neviem, čo je tam prázdne, keď konečne rozdelím všetko ako mám, explode funguje krásne, po print_r dostanem:
INSERT INTO `world_map` VALUES (13146,-71,384,3,81369,'=pÁĽeňYica=',3680,'Zdurený Zajko',0,'',35)
A pritom mi to píše "query was empty" Mám pocit, že chyba bude v for. Tu je:
for($i=0; $i <= sizeof($explode); ++$i)
{
  mysql_query($explode[$i]) or die(mysql_error());
}
Kde môže byť teda chyba?
Mastodont
Profil
for($i=0; $i < sizeof($explode); ++$i)
Senky
Profil
Ďakujem za radu, ale stále to vypisuje Query was empty.

Ja mám dnes taký nevydarený deň... už druhý skript, ktorý nemôžem rozbehať...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: