Hi,
mein Problem gehört wohl in zwei Rubriken aber ich bringe es mal hier rein.
Ich habe ein SQL-Script welches ich Euch nicht unbedingt zumuten möchte.
Ich versuche jetzt mit PHP ein Setup-Seite zu machen welches nix anderes macht als eine Datenbank neu zu erstellen bzw. eine vorhandene zu verwenden und dort die Tabellen die im Sql--Script sind anzulegen.
Meine PHP-Datei sieht wie folgt aus:
PHP-Code:
<?php
<?php
// ==================================================================================================
// INCLUDES
// ==================================================================================================
// ==================================================================================================
// Initialisieren der internen Variablen nach Start der Installation
// ==================================================================================================
if ($_POST["su_action"] == "GO")
{
$dbhost = $_POST["su_dbhost"];
$dbpassword = $_POST["su_dbpassword"];
$dbuser = $_POST["su_dbuser"];
$dbname = $_POST["su_dbname"];
$dbcreate = $_POST["su_dbcreate"];
}
// ==================================================================================================
// Prüfen der eingegebenen Werte und connect zur Datenbank
// ==================================================================================================
if ($_POST["su_action"] == "GO")
{
$db = new Database($dbhost, $dbname, $dbuser, $dbpassword); // Datenbankobjekt initialisieren
if (!$db->connect()) // Verbindung zum Server herstellen
$msgtxt = "Die Verbindung zum Server ist fehlgeschlagen"; // Verbindung zum Server konnte nicht hergestellt werden
else
{
if ($dbcreate == "1") // Soll die Datenbank neu erstellt werden ?
{
$SqlString = "CREATE DATABASE " . $dbname ;
$msgtxt = $db->executeSql($SqlString);
if ($msgtxt == "")
{ // Erstellen der Datenbank war erfolgreich
$msgtxt = $db->open(); // Öffenen der Datenbank
if ($msgtxt != "")
$msgtxt = "Fehler bei Öffnen der Datenbank. " . $msgtxt;
}
else
$msgtxt = "Fehler beim Erstellen der Datenbank. " . $msgtxt;
}
else
{ // Datenbank soll nicht neu erstellt werden
$msgtxt = $db->open(); // Öffnen der Datenbank
if ($msgtxt != "")
$msgtxt = "Fehler bei Öffnen der Datenbank. " . $msgtxt;
}
}
}
// ==================================================================================================
// Falls kein Fehler aufgetreten ist Script zur Erstellung der Datenbank ausfüren
// ==================================================================================================
if ($_POST["su_action"] == "GO" AND $msgtxt=="")
{
$fp = fopen("ip_setup_db.sql", 'r') or die($msgtxt = "Setup-Script ip_setup_db.sql im aktuellen Verzeichnis nicht vorhanden");
if ($msgtxt == "")
{
$SqlString = "";
while (!feof($fp))
{
$SqlString = trim($SqlString) . fgets($fp,1024);
}
print "Sql:" . $SqlString;
$msgtxt = $db->executeSql($SqlString);
if ($msgtxt == "")
$msgtxt = "Tabellen wurden erstellt";
else
$msgtxt = "Fehler beim Erstellen der Tabellen. " . $msgtxt;
}
}
?>
<html>
<head>
<title>iTEC Portal - Setup</title>
</head>
<body>
<form name="form1" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
[b]Host[/b]
<input type="text" name="su_dbhost" value="<?php print $dbhost; ?>">
[b]Kennwort[/b]
<input type="password" name="su_dbpassword" value="<?php print $dbpassword; ?>">
[b]Benutzer[/b]
<input type="text" name="su_dbuser" value="<?php print $dbuser; ?>">
[b]Datenbankname[/b]
<input type="text" name="su_dbname" value="<?php print $dbname; ?>">
<input type="radio" name="su_dbcreate" value="1" <?php if ($dbcreate != "0") print 'checked="checked"'; ?>>
[b]Tabellen in neuer Datenbank erstellen ?[/b]
<input type="radio" name="su_dbcreate" value="0" <?php if ($dbcreate == "0") print 'checked="checked"'; ?>>
[b]Tabellen in vorhandener Datenbank erstellen ?[/b]
<input type="submit" name="su_setup" value="Installation ausführen">
<input type="hidden" name="su_action" value="GO">
</form>
<?php print $msgtxt; $msgtxt=""; ?>
</body>
</html>
<?php
// ==============================================================================
// Klassen
// ==============================================================================
// Stellt Funktionen, die mit Datenbank und DB-Zugriffen zu tun haben zur Verfügung
// ==============================================================================
class Database
{
// ==============================================================================
// function connect()
// Stellt die Verbindung zur Datenbank her
// function open()
// Öffnet die ausgewählte Datenbankt
// function close()
// Schließt die aktuelle Datenbank
// function selectSet($sqlstring="")
// Liefert alle Sätze der Abfrage
// function openSet($sqlstring="")
// Stellt ein set zur Bearbeitung mit slelectNext zur Verfügung
// function selectNext()
// Liefert den nächsten Satz der Abfrage
// function selectRecord($sqlstring="")
// Liefert einen Satz einer Abfrage
// function selectField($sqlstring="", $fieldnr=0)
// Liefert das übergeben Feld aus dem ersten Satz der Abfrage
// function executeSql($sqlstring="")
// führt ein übergebenes SQL-Statement aus ( write, update, delete )
// falls ein Fehler auftritt wird die Fehlermeldung als String zurückgegeben
// ------------------------------------------------------------------------------
// Attribute
// ------------------------------------------------------------------------------
var $Host;
var $User;
var $Pwd;
var $DBName;
var $SqlString;
var $LinkID;
var $Set;
// ------------------------------------------------------------------------------
// Konstruktor
// ------------------------------------------------------------------------------
function Database($host, $dbname, $user, $pwd)
{
$this->Host = $host;
$this->User = $user;
$this->Pwd = $pwd;
$this->DBName = $dbname;
}
// ------------------------------------------------------------------------------
// GET- und SET-Methoden
// ------------------------------------------------------------------------------
function setHost($host)
{
$this->Host = $host;
}
function getHost()
{
return $this->Host;
}
function setUser($user)
{
$this->User = $user;
}
function getUser()
{
return $this->User;
}
function setPwd($pwd)
{
$this->Pwd = $pwd;
}
function getPwd()
{
return $this->Pwd;
}
function setDBName($dbname)
{
$this->DBName = $dbname;
}
function getDBName()
{
return $this->DBName;
}
function setSqlString($sqlstring)
{
$this->SqlString = $sqlstring;
}
function getSqlString()
{
return $this->SqlString;
}
function getLinkID()
{
return $this->LinkID;
}
// ------------------------------------------------------------------------------
// Methoden
// ------------------------------------------------------------------------------
function connect()
{
$this->LinkID = mysql_connect($this->Host, $this->User, $this->Pwd);
if (!$this->LinkID) return false;
return $this->LinkID;
}
function open()
{
if (!mysql_select_db($this->DBName, $this->LinkID))
{
return mysql_error($this->LinkID);
}
}
function close()
{
mysql_close($this->LinkID);
}
function selectSet($sqlstring="")
{
if ($sqlstring != "")
{
$this->SqlString = $sqlstring;
}
$this->Set = mysql_query($this->SqlString, $this->LinkID);
if (!$this->Set) die("Fehler in der Abfrage. Abfrage:" . $this->SqlString);
return $this->Set;
}
function openSet($sqlstring="")
{
if ($sqlstring != "")
{
$this->SqlString = $sqlstring;
}
$this->Set = mysql_query($this->SqlString, $this->LinkID);
if (!$this->Set) die("Fehler in der Abfrage. Abfrage:" . $this->SqlString);
}
function selectNext()
{
$zeile = mysql_fetch_array($this->Set,MYSQL_BOTH);
if (!$zeile)
return False;
else
return $zeile;
}
function selectRecord($sqlstring="")
{
if ($sqlstring != "")
{
$this->SqlString = $sqlstring;
}
$resID = mysql_query($this->SqlString, $this->LinkID);
if (!$resID) die("Fehler in der Abfrage. Abfrage:" . $this->SqlString);
$zeile = mysql_fetch_array($resID,MYSQL_BOTH);
return $zeile;
}
function selectField($sqlstring="", $fieldnr=0)
{
if ($sqlstring != "")
{
$this->SqlString = $sqlstring;
}
$resID = mysql_query($this->SqlString, $this->LinkID);
if (!$resID) die("Fehler in der Abfrage. Abfrage:" . $this->SqlString);
$zeile = mysql_fetch_array($resID,MYSQL_BOTH);
return $zeile[$fieldnr];
}
function executeSql($sqlstring="")
{
if ($sqlstring != "")
{
$this->SqlString = $sqlstring;
}
if (!mysql_query($this->SqlString, $this->LinkID))
{
return mysql_error($this->LinkID);
}
}
}
?>
?> Der Beginn meines SQL-Scripts (jetzt mute ich es Euch halt doch mal zu

) sieht wie folgt aus
SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS ;
SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;
SET NAMES utf8;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=NO_AUTO_VALUE_ON_ZERO */;
CREATE TABLE `ip_areatab_t` (
`id` int(10) unsigned NOT NULL auto_increment,
`area` varchar(45) character set utf8 NOT NULL default '',
`tablename` varchar(45) character set utf8 NOT NULL default '',
`area_group` varchar(45) character set utf8 default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ip_areatab_l1` (`area`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Tab. für Bereiche des Portals und Verbindung zu Tabellen';
INSERT INTO `ip_areatab_t` (`id`,`area`,`tablename`,`area_group`) VALUES
(1,'head','ip_head_t',NULL),
(2,'foot','ip_foot_t',NULL),
(3,'content1','ip_content_t','content'),
(4,'content2','ip_content_t','content'),
(5,'info1','ip_info_t','info'),
(6,'info2','ip_info_t','info'),
(7,'info3','ip_info_t','info'),
(8,'info4','ip_info_t','info');
Jetzt meckert er mir folgenden Fehler an:
Fehler beim Erstellen der Tabellen. 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 ';SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS ;SET @OLD_COLLATION_CONNE' at line 1
Wie man sieht lese ich das Script ein und übergebe es komplett an mysql_query.
Hat mysql-query Probleme mehrere Anweisungen gleichzeitg auszuführen oder kann mysql-query nicht mit den SETs umgehen. Oder habe ich vielleicht die Möglichkeit über einen PHP-Befehl das SQL-Script direkt auszuführen ohne es einlesen zu müssen ???
Fragen über Fragen. Kann mir da jemand helfen ?