Import SQL
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!
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.
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 schreef op 13.12.2008 14:17:
Niet met meerdere queries in 1 keer. En daar is hier sprake van, dat gaat dus niet lukken.Werkt mysql_query($sql) niet gewoon?
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.
@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?
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.
Je hebt alleen wel toegang nodig...
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?
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.
Dit is MySQL, ik denk dat ik die daarmee niet kan gebruiken?