Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
am 17.07.2006 17:03:35 von Hugo Balazs
Hallo NG,
ich möchte mit einem install-script mehrere Tabellen erstellen und habe
es zum Testen mit dem Befehl "mysql_query" versucht. Eine Tabelle
erstellen funktioniert einwandfrei. Ab zwei bekomme ich eine
Fehlermeldung betreffend SQL-Syntax.
Mit phpMyAdmin ist es möglich das gesamte SQL-Script in einem einzigen
Formularfenster einzutippen und hochzuladen. Wo mache ich was falsch und
wie könnte eine Lösung aussehen?
Beispiele:
$creatab="
CREATE TABLE `MENUD` (
`MENUD_a` int(11) NOT NULL default '0',
`MENUD_pos` int(11) default '0',
`MENUD_name` varchar(250) default NULL,
PRIMARY KEY (`MENUD_a`)
) TYPE=MyISAM;
CREATE TABLE `MENUE` (
`MENUE_a` int(11) NOT NULL default '0',
`MENUE_pos` int(11) default '0',
`MENUE_name` varchar(250) default NULL,
PRIMARY KEY (`MENUE_a`)
) TYPE=MyISAM;
";
$result = mysql_query ($creatab)or die ("SQR ERROR: " . mysql_error());
Vielen Dank,
Hugo Balazs
Re: Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
am 17.07.2006 17:14:45 von Niels Braczek
Hugo Balazs schrieb:
> ich möchte mit einem install-script mehrere Tabellen erstellen und ha=
be=20
> es zum Testen mit dem Befehl "mysql_query" versucht. Eine Tabelle=20
> erstellen funktioniert einwandfrei. Ab zwei bekomme ich eine=20
> Fehlermeldung betreffend SQL-Syntax.
16.2. Wieso kann ich mehrere, durch Semikolon getrennte Statements nicht
ausführen?
http://www.php-faq.de/q/q-sql-statements.html
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
am 17.07.2006 17:19:07 von Thomas Rachel
Hugo Balazs wrote:
> Hallo NG,
>
> ich möchte mit einem install-script mehrere Tabellen erstellen und habe
> es zum Testen mit dem Befehl "mysql_query" versucht.
Das geht AFAIK zwar irgendwie (hab grad keine Lust, im Handbuch
nachzusehen), ist aber nicht das Gelbe vom Ei, u.a. weil Du bei einer
Fehlermeldung nicht mitbekommst, auf welchen der beiden Befehle sie sich
bezieht.
> Eine Tabelle
> erstellen funktioniert einwandfrei. Ab zwei bekomme ich eine
> Fehlermeldung betreffend SQL-Syntax.
Weil die Sache mit dem ";" explizit freigeschaltet werden muà (und ich nicht
genau weiÃ, ob das auch unter PHP geht).
> Mit phpMyAdmin ist es möglich das gesamte SQL-Script in einem einzigen
> Formularfenster einzutippen und hochzuladen.
phpMyAdmin analysiert den eingegebenen String und trennt ihn an Stellen, wo
ein ; auÃerhalb eines Strings vorkommt, auf.
> Wo mache ich was falsch und wie könnte eine Lösung aussehen?
Zum Beispiel so:
$db=mysql_connect(...) // ist besser
$creatab=array(
"CREATE TABLE `MENUD` (
`MENUD_a` int(11) NOT NULL default '0',
`MENUD_pos` int(11) default '0',
`MENUD_name` varchar(250) default NULL,
PRIMARY KEY (`MENUD_a`)
) TYPE=MyISAM",
"CREATE TABLE `MENUE` (
`MENUE_a` int(11) NOT NULL default '0',
`MENUE_pos` int(11) default '0',
`MENUE_name` varchar(250) default NULL,
PRIMARY KEY (`MENUE_a`)
) TYPE=MyISAM");
foreach ($creatab as $sql) {
$result = mysql_query ($sql,$db) or
die ("SQR ERROR: " . mysql_error($db));
}
Die ` sind übrigens nicht überall nötig; unnötig eingesetzt reduzieren sie
die Lesbarkeit enorm.
Thomas
Re: Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
am 17.07.2006 17:55:27 von Carsten Wiedmann
Thomas Rachel schrieb:
> Die ` sind übrigens nicht überall nötig; unnötig eingesetzt reduzieren sie
> die Lesbarkeit enorm.
Unnötig nicht eingesetzt, erhöht sich die Wahrscheinlichkeit, dass beim
nächsten MySQL-Update dein Script nicht mehr funktioniert.
(Nebenbei sieht man so auch gleich, dass man hier einen Bezeichner vor sich
hat und von wo bis wo der im Query geht.)
Gruß
Carsten
Re: Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
am 17.07.2006 18:59:29 von Frank Schenk
Carsten Wiedmann schrieb:
> Thomas Rachel schrieb:
>
>> Die ` sind übrigens nicht überall nötig; unnötig eingesetzt reduzieren
>> sie
>> die Lesbarkeit enorm.
>
> Unnötig nicht eingesetzt, erhöht sich die Wahrscheinlichkeit, dass beim
> nächsten MySQL-Update dein Script nicht mehr funktioniert.
>
> (Nebenbei sieht man so auch gleich, dass man hier einen Bezeichner vor
> sich hat und von wo bis wo der im Query geht.)
Backticks verwendet man NIE es sei denn man will dem Kundigen verraten,
daß man bei seinem DB Design gepfuscht hat und reservierte Wörter als
Datenbank/Tabellen/Spaltennamen verwendet hat.
Diese Unart mit den Backticks wird u.a. massiv von phpMyAdmin verbreitet.
Siehe Handbuch zu "Reservierte Wörter"
Frank
Re: Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
am 17.07.2006 22:18:33 von Thomas Rachel
Frank Schenk wrote:
> Carsten Wiedmann schrieb:
>> (Nebenbei sieht man so auch gleich, dass man hier einen Bezeichner vor
>> sich hat und von wo bis wo der im Query geht.)
Von wo bis wo? Bis zum nächsten Wortende. (Bezeichner aus mehreren
Wörtern sind auch extrem unschön.)
> Backticks verwendet man NIE es sei denn man will dem Kundigen verraten,
> daà man bei seinem DB Design gepfuscht hat und reservierte Wörter als
> Datenbank/Tabellen/Spaltennamen verwendet hat.
So hatte ich das bisher auch immer gelesen - allerdings hat die
Kompatiblitäts-Argumentation was...
> Diese Unart mit den Backticks wird u.a. massiv von phpMyAdmin
> verbreitet.
Leider auch von MySQL selbst - ein Query "SHOW CREATE TABLE ..." gibt
beispielsweise ebenfalls die Tabellenstruktur mit diesen `` drumrum
zurück.
Thomas
--
Alle Tage sind gleich lang, nur manche sind breiter als andere.
Re: Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
am 17.07.2006 23:58:20 von Niels Braczek
Thomas Rachel schrieb:
> Frank Schenk wrote:
>> Backticks verwendet man NIE es sei denn man will dem Kundigen verraten=
,
>> daß man bei seinem DB Design gepfuscht hat und reservierte Wörter =
als
>> Datenbank/Tabellen/Spaltennamen verwendet hat.
>=20
> So hatte ich das bisher auch immer gelesen - allerdings hat die
> Kompatiblitäts-Argumentation was...
Gerade aus Kompatibiltätsgründen verzichtet man auf die
MySQL-spezifischen Backticks. Werden die Bezeichner (wie zB. bei
phpMyAdmin) erst zur Laufzeit festgestellt, können sich allerdings
ungpltige Namen finden. Daher werden dann die Backticks eingesetzt.
>> Diese Unart mit den Backticks wird u.a. massiv von phpMyAdmin
>> verbreitet.
Da ist es auch erforderlich.
> Leider auch von MySQL selbst - ein Query "SHOW CREATE TABLE ..." gibt
> beispielsweise ebenfalls die Tabellenstruktur mit diesen `` drumrum
> zurück.
Das ist steuerbar.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
am 18.07.2006 08:40:28 von Hugo Balazs
Niels Braczek schrieb:
> 16.2. Wieso kann ich mehrere, durch Semikolon getrennte Statements nicht
> ausführen?
> http://www.php-faq.de/q/q-sql-statements.html
>
> MfG
> Niels
Einen schönen Dank für alle Antworten. Jetzt weiß ich wo ich stehe und
wie ich weitermachen muss. Die SQL-Anweisungen wurden aus phpMyAdmin
mittels der Exportfunktion generiert (Backticks).
Hugo Balazs
Re: Mehere mySQL-Tabellen mit einem PHP-Befehl erstellen?
am 20.07.2006 02:22:47 von Carsten Wiedmann
Niels Braczek schrieb:
> Thomas Rachel schrieb:
> > Frank Schenk wrote:
>
> > > Backticks verwendet man NIE es sei denn man will dem Kundigen
> > > verraten,
> > > daß man bei seinem DB Design gepfuscht hat und reservierte Wörter als
> > > Datenbank/Tabellen/Spaltennamen verwendet hat.
> >
> > So hatte ich das bisher auch immer gelesen - allerdings hat die
> > Kompatiblitäts-Argumentation was...
>
> Gerade aus Kompatibiltätsgründen verzichtet man auf die
> MySQL-spezifischen Backticks.
Dann verwendet man schon nicht, wie der OP, direkt die MySQL-Funktion.
Ansonsten helfen einem delimited Identifier jedenfalls ungemein, wenn es
darum geht zu verhindern, dass die benutzen Identifier bei einem Upgrade
oder Wechsel des DBMS nicht mehr anerkannt werden.
Gruß
Carsten