Okay, ik heb hier lokaal (WAMP server) een database geëxporteerd vanuit phpmyadmin als bestand: database.sql
Deze wil ik via een page met button uitvoeren op een andere server.
Dat werkt, to zover.
De pagina create_db wordt geopend waarin volgende code staat:
<?php
include ("config.php");
$dbname = "test";
mysql_connect("$dblocation", "$dbuser", "$dbpass")or die("cannot connect");
mysql_select_db("$dbname")or die("cannot select DB");
$file ='database.sql';
$sql = fread(fopen($file,"r"), filesize($file));
mysql_query($sql);
echo $sql; // dit is om te checken of het bestand gelezen is
?>
Als ik later in mijn database kijk zie ik geen nieuwe tabellen noch krijg ik een foutmelding.
<?php
include ("config.php");
$dbname = "test";
mysql_connect("$dblocation", "$dbuser", "$dbpass")or die("cannot connect");
mysql_select_db("$dbname")or die("cannot select DB");
$file ='database.sql';
$sql = file_get_contents($file);
mysql_query($sql);
echo $sql; // dit is om te checken of het bestand gelezen is
?>
Wil je een proberen om één deel van de query uit te voeren? Iets tot de ; zoals dit:
CREATE TABLE IF NOT EXISTS `records`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`bedrijf` varchar(50) NOT NULL,
`adres` varchar(50) NOT NULL,
`postcode` varchar(10) NOT NULL,
`plaats` varchar(50) NOT NULL,
`telefoon` int(12) NOT NULL,
`fax` int(12) NOT NULL,
`email` varchar(50) NOT NULL,
`website` varchar(50) NOT NULL,
`contactpersoon` varchar(50) NOT NULL,
`geslacht` int(2) NOT NULL,
`telcontact` int(12) NOT NULL,
`toestelcontact` int(20) NOT NULL,
`emailcontact` varchar(50) NOT NULL,
`notes` varchar(100) NOT NULL,
`script` varchar(500) NOT NULL,
`afboeken` int(10) NOT NULL,
KEY `id` (`id`) )
ENGINE=MyISAM
DEFAULT CHARSET=latin1
AUTO_INCREMENT=8
Mooi, vooruitgang. Nee, je query is niet te lang, maar je moet hem opbreken in losse query's. Dat zou je kunnen doen op deze manier:
<?php
include ("config.php");
$dbname = "test";
mysql_connect("$dblocation", "$dbuser", "$dbpass")or die("cannot connect");
mysql_select_db("$dbname")or die("cannot select DB");
$file ='database.sql';
$sql = fread(fopen($file,"r"), filesize($file));
$explode = explode(';', $sql);
foreach($explode as $query)
{
mysql_query($query);
}
//echo $sql; // dit is om te checken of het bestand gelezen is
?>
Niet echt zo briljant hoor, want wat gebeurt er nu wanneer er ergens in een veld in je DB een ; ingevult stond? .. Juist.
Ook zeg je dit:
Edward schreef op 08.11.2009 22:57
Pffffff, frustrerend als iets niet werkt zónder dat je een foutmelding krijgt :p
Logisch als je niet een controle invoert die controleert als de query wel gelukt is.. Je zou veel tijd gewonnen hebben omdat je dan meteen zou kunnen zien waarom mysql de gegeven query niet wil uitvoeren. Zoek maar eens rond hoe je dat zou moeten doen, er zijn genoeg topics waar dit besproken werd.
Verder is er een mogelijkheid dacht ik om meerdere query's in 1 keer uit te voeren, dan hoef je ze niet eerst te splitsen en dan een voor een uitvoeren.