Import SQL
Hoi,
Ik ben opzoek naar een scriptje / snippet om de SQL te importeren via PHP. Ik heb een string waar alle SQL inzit, wat opgevuld is door een formulier d.m.v. uploaden.
Ik dacht laat ik eens logisch nadenken, en het met
Niet dus, want er komt b.v ook in de query's hetzelfde teken voor. Is er een manier om dit zonder al teveel werk aan de praat te krijgen?
Alvast bedankt,
Niels.
Ik ben opzoek naar een scriptje / snippet om de SQL te importeren via PHP. Ik heb een string waar alle SQL inzit, wat opgevuld is door een formulier d.m.v. uploaden.
Ik dacht laat ik eens logisch nadenken, en het met
Niet dus, want er komt b.v ook in de query's hetzelfde teken voor. Is er een manier om dit zonder al teveel werk aan de praat te krijgen?
Alvast bedankt,
Niels.
Code (php)
1
2
2
$import_sql = mysql_real_escape_string($contents);
$import_result = mysql_query($import_sql) or die(mysql_error());
$import_result = mysql_query($import_sql) or die(mysql_error());
Hmm, zoiets heb ik al geprobeerd. Dan krijg je dus de volgende error:
"Got a packet bigger than 'max_allowed_packet' bytes"
Ik wil niets aan de serverinstellingen aanpassen eigenlijk. Het is echt een eis dat het via PHP gaat, niet via mysqldump of iets dergelijks.
Ik zat al te zoeken in de bron van phpmyadmin, maar daar word je ook niet veel wijzer van.
Bedankt voor je reactie!
@Niels v.k
Meestal als je meerdere query's gebruikt worden deze gescheiden door een ; en een ENTER. -> Dus je kan hem eventueel exploden op
Het enige is weer wel:
Dit mag ook weer niet als dusdanig in je query zelf voorkomen, dan gaat het mis.
Meestal als je meerdere query's gebruikt worden deze gescheiden door een ; en een ENTER. -> Dus je kan hem eventueel exploden op
Het enige is weer wel:
Dit mag ook weer niet als dusdanig in je query zelf voorkomen, dan gaat het mis.
Ja inderdaad, dat probleem heb ik dus ook.
Heeft iemand nog een tip?
Ik ga even zoeken in de scripts van PHPmyadmin.
EDIT:
Ik dacht in eens aan zoiets:
Maar dan krijg ik maar een 2 delige array? (horen er minstens 35.000 te zijn)
Heeft iemand nog een tip?
Ik ga even zoeken in de scripts van PHPmyadmin.
EDIT:
Ik dacht in eens aan zoiets:
Maar dan krijg ik maar een 2 delige array? (horen er minstens 35.000 te zijn)
Gewijzigd op 01/01/1970 01:00:00 door Niels van K
Werkt mysql_query($sql) niet gewoon?
'Mathijs:
Niet met meerdere queries in 1 keer. En daar is hier sprake van, dat gaat dus niet lukken.Werkt mysql_query($sql) niet gewoon?
Och ja da's waar ook. Ik denk dat je het toch op de een of andere manier met Marco's oplossing aan de gang moet.
Ik vind het vreemd dat je een packet too large error krijgt, hoe lang is iedere regel dan eigenlijk / wat is je max_allowed_packet instelling.
Ik vind het vreemd dat je een packet too large error krijgt, hoe lang is iedere regel dan eigenlijk / wat is je max_allowed_packet instelling.
De standaard instelling, namelijk 1MB. Dit kan ik niet verhogen i.v.m. verschillende redenen.
@pqFrank: Klopt, bestand bestaat uit ruim 30.000 queries...
"I guess it will NOT working, because of line can be much more than 2048 bytes, or it can be BLOB or another.."
Staat er in de mailing list (link Marco) voor het while scriptje, dit klopt dus ook.
Iemand anders nog een oplossing?
@pqFrank: Klopt, bestand bestaat uit ruim 30.000 queries...
"I guess it will NOT working, because of line can be much more than 2048 bytes, or it can be BLOB or another.."
Staat er in de mailing list (link Marco) voor het while scriptje, dit klopt dus ook.
Iemand anders nog een oplossing?
En als je 'm in een while lus gooit ?? word wel ietsies traag denk ik.....
Maar als je m dan verdeeld, telkens bij een ; en dan lijn voor lijn invoegen(vraag me niet hoe je t doet, ik probeer alleen beetje mee te denken...).
mvg Joost.
Maar als je m dan verdeeld, telkens bij een ; en dan lijn voor lijn invoegen(vraag me niet hoe je t doet, ik probeer alleen beetje mee te denken...).
mvg Joost.
Kun je niet vanaf de commandline de query uitvoeren? Werkt 100 keer eenvoudiger en sneller.
Je hebt alleen wel toegang nodig...
Je hebt alleen wel toegang nodig...
@Joost: Een explode op de laaste ; is een idee.
Zoiets had ik:
preg_split("/;$/", $import_sql);
Krijg het alleen niet werkend.
@pqFrank: Ik heb toegang, het probleem is dat het multi-platform moet zijn.
Hoe krijg ik een explode op een ; aan het eind van een regel?
Zoiets had ik:
preg_split("/;$/", $import_sql);
Krijg het alleen niet werkend.
@pqFrank: Ik heb toegang, het probleem is dat het multi-platform moet zijn.
Hoe krijg ik een explode op een ; aan het eind van een regel?
\n wordt in een regex ook gewoon als newline gezien, dus je zou zoiets kunnen proberen:
Code (php)
1
2
3
4
2
3
4
$import_sql = str_replace("\r\n", "\n", $contents);
$import_sql = str_replace("\r", "\n", $import_sql);
$import_sql = split("/;\n$/", $import_sql);
echo count($import_sql);
$import_sql = str_replace("\r", "\n", $import_sql);
$import_sql = split("/;\n$/", $import_sql);
echo count($import_sql);
Even om te testen, krijg ik 1 terug. Dit moet ook niet mogelijk zijn?
Gebruik uiteraard wel preg_split() in plaats van split()...
Zelfde resultaat, vergeten erbij te vermelden. excuus.
Solved:
Voor postgresql heb ik hier een importer:
http://www.phphulp.nl/php/scripts/3/1431/
http://www.phphulp.nl/php/scripts/3/1431/
Nice, die hou ik in het achterhoofd. :)
Dit is MySQL, ik denk dat ik die daarmee niet kan gebruiken?
Dit is MySQL, ik denk dat ik die daarmee niet kan gebruiken?




