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.

Wat doe ik fout?


Probeer het eens met file_get_contents:

<?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
?> 
Thanks voor de snelle reactie, maar werkt ook niet.

Overigens krijg ik wel een uitdraai van de gehele query in beide gevallen.

Pffffff, frustrerend als iets niet werkt zónder dat je een foutmelding krijgt :p
Uitdraai van de query? Zou je die eens willen laten zien?

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 ; CREATE TABLE IF NOT EXISTS `sales` ( `id` int(10) NOT NULL AUTO_INCREMENT, `date` varchar(20) NOT NULL, `user` varchar(30) NOT NULL, `company` varchar(40) NOT NULL, `notes` varchar(600) NOT NULL, KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; CREATE TABLE IF NOT EXISTS `scripts` ( `id` int(10) NOT NULL AUTO_INCREMENT, `campagne` varchar(50) NOT NULL, `script` varchar(6000) NOT NULL, `info` varchar(200) NOT NULL, `active` int(1) NOT NULL, KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; CREATE TABLE IF NOT EXISTS `users` ( `id` int(10) NOT NULL AUTO_INCREMENT, `user` varchar(60) NOT NULL, `password` varchar(60) NOT NULL, `naam` varchar(60) NOT NULL, `admin` int(1) NOT NULL, PRIMARY KEY (`id`), KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ; INSERT INTO `users` (`id`, `user`, `password`, `naam`, `admin`) VALUES (1, 'admin', 'admin', 'Administrator', 1); 



Als ik deze uitvoer in phpmyadmin, dan doet ie het gewoon.
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


Laat het even weten of die het wel doet
Ja die doet het! Is mijn query te lang?
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.
Je hebt gelijk, maar in dit geval gaat het alleen maar om het eenmalig aanmaken van een aantal tabellen waarin geen ";" tekens staan.

Bedankt voor de tip.

Reageren