Hoi,

ik heb een php applicatie geschreven, waarvan ik ook een demo versie online wil
plaatsen. Bedoeling is dat ik via een cron job de database elke 24u reset. Ik heb
daarvoor volgend script (en een goed werkend sql bestand met de correct lege data,
dit bestand word succesvol geïmporteerd in het phpmyadmin


$host = "localhost";
$user = "xxxx";
$pass = "xxxx";
$database = "xxxxx";
mysql_connect($host, $user, $pass);
mysql_select_db($database) or die ("Kan de database niet openen");

$all_lines = file("install_sql_demo.sql", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);

foreach($all_lines as $query) {
if(substr($query, 0, 2) == "--") {
$sql="";
continue;
}
else
{
$sql.=" ".$query;
}
mysql_query($sql) or die("Error executing query <br/>&nbsp;&nbsp;".$sql."<br/>".mysql_error());
}

Nu blijkt hij niet in staat de query's uit te voeren zonder error. Als ik de getoonde
foute query in phpmyadmin probeer werkt hij wel. Wat doe ik fout ??
Wat is de error?
Hoe ziet die query er dan uit waar het script op vastloopt?
De fout :

Error executing query
CREATE DATABASE IF NOT EXISTS `data_demo` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `data_demo`;
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 'USE `data_demo`' at line 1

De query is natuurlijk te groot om hier te posten , ik zal een eerste deel tonen :


-- phpMyAdmin SQL Dump
-- version 3.5.6
-- http://www.phpmyadmin.net
--
-- Machine: localhost:3306
-- Genereertijd: 28 mrt 2013 om 11:39
-- Serverversie: 5.1.56-community
-- PHP-versie: 5.3.10



--
-- Databank: `data_data`
--
CREATE DATABASE IF NOT EXISTS `data_demo` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `data_demo`;

-- --------------------------------------------------------

--
-- Tabelstructuur voor tabel `si_biller`
--

CREATE TABLE IF NOT EXISTS `si_biller` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`domain_id` int(11) NOT NULL DEFAULT '1',
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`street_address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`street_address2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`city` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`state` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`zip_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`country` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`phone` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mobile_phone` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`fax` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`logo` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`footer` text COLLATE utf8_unicode_ci,
`paypal_business_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`paypal_notify_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`paypal_return_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`eway_customer_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`notes` text COLLATE utf8_unicode_ci,
`custom_field1` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`custom_field2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`custom_field3` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`custom_field4` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`enabled` varchar(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT '1',
PRIMARY KEY (`domain_id`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

DELETE FROM `si_biller` WHERE 1;
Van de php manual:

mysql_query() sends a unique query (multiple queries are not supported) to the currently active database on the server that's associated with the specified link_identifier.

Nu weet ik niet of het je bedoeling is meerdere queries tegelijk uit te voeren (wat dus niet kan), maar ik denk wel dat dat gebeurt. Dit doe je namelijk:
<?php
$sql.=" ".$query;
?>
Elke regel wordt dus aan de vorige geplakt en zo maak je de query string dus steeds langer en mogelijk krijg je meerdere queries achter elkaar. Alleen als er een commentaar regel tussenstaat wordt $sql gereset.
Natuurlijk is het wel de bedoeling om meerder query's uit te voeren, aangezien de volledige database gereset moet worden. Op deze manier had ik gehoopt om via de loop de query die in de regels eruit te filteren, uit te voeren en verder te gaan naar de volgende.

bestaat er geen commando die multiple query's wel aankan ?
swedish_ci; USE

Na de puntkomma gaat het fout.
Ik begrijp wel dat je meerdere queries wilt uitvoeren, maar dat moet je voor elke query mysql_query aanroepen. Alle in 1 keer in mysql_query dumpen gaat dus niet werken.
Ok , heb het zo opgelost. bedankt

Reageren