CREATE TABLE

CREATE TABLE

am 03.04.2007 16:35:28 von ToM80

Hallo zusammen, ich habe einen Punkt, an dem ich mir die Zähne
ausbeiße:

Ich versuche mittels PHP eine Tabelle zu erstellen, jedoch bekomme ich
dort immer Fehlermeldungen. Erst gab es ein Fehler 1064, dann den
Fehler 1103 (Incorrect table name 'test.tbl_test3').
Problem ist, ich muss die Tabelle in einer DB erstellen, die
ausserhalb der aufgerufenen DB existiert.

Wenn ich das ganze in das SQL-Fenster bei phpmyadmin eingebe kommt
aber wieder der Fehler 1064

#1064 - 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 '3 (`testID`TINYINT( 2 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`TestVar1`VARCHAR( ' at line 1

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

Hier der Aufruf:
create table test.tbl_test 3 (`testID`TINYINT( 2 ) NOT NULL
AUTO_INCREMENT PRIMARY KEY, `TestVar1`VARCHAR( 20 ) latin1_german2_ci
NOT NULL) ENGINE=3Dinnodb

In PHP sieht das ganze so aus:
for ($eFeld=3D"0";$eFeld<$DBtableFelderAnz;$eFeld++) {
$Felder.=3D"`".$DBFeldName[$eFeld]."`";
if ($DBFeldTypErw[$eFeld]!=3D"") {
$DBFeldTyp[$eFeld]=3D$DBFeldTyp[$eFeld]."( ".
$DBFeldTypErw[$eFeld]." )";

$Felder.=3D" ".$DBFeldTyp[$eFeld];
} else {
$Felder.=3D" ".$DBFeldTyp[$eFeld];
}
if ($DBFeldKollation[$eFeld]!=3D"") {
if ($DBFeldTyp[$eFeld]!=3D"TINYINT(2)") {
$Felder.=3D" ".$DBFeldKollation[$eFeld];
}
}
if ($DBFeldAttribute[$eFeld]!=3D"") {
$Felder.=3D" ".$DBFeldAttribute[$eFeld];
}
if ($DBFeldNull[$eFeld]!=3D"") {
$Felder.=3D" ".$DBFeldNull[$eFeld];
}
if ($DBFeldStandardErwCurrentTimestamp!=3D"") {
$Felder.=3D" DEFAULT CURRENT_TIMESTAMP";
} elseif ($DBFeldStandard[$eFeld]!=3D"") {
$Felder.=3D" DEFAULT ".$DBFeldStandard[$eFeld];
}
if ($DBFeldExtra[$eFeld]!=3D"") {
$Felder.=3D" ".$DBFeldExtra[$eFeld];
}
if ($DBFeldEigenschaft[$eFeld]!=3D"") {
$Felder.=3D" ".$DBFeldEigenschaft[$eFeld];
}
if ($DBVolltext[$eFeld]!=3D"") {
$Felder.=3D" ".$DBFeldVolltext[$eFeld];
}
//Komma nur anfügen wenn nicht letztes Element
if ($eFeld!=3D($DBtableFelderAnz-1)) {
$Felder.=3D" ,";
}
}
//TABELLE ERSTELLEN
$db->query("CREATE TABLE IF NOT EXISTS `$dbName.$DBtableName`
($Felder) ENGINE=3Dinnodb");

Re: CREATE TABLE

am 03.04.2007 17:00:58 von Nico Haase

Hallöchen,
*ToM80* schrub:
> Hier der Aufruf:
> create table test.tbl_test 3 (`testID`TINYINT( 2 ) NOT NULL
> AUTO_INCREMENT PRIMARY KEY, `TestVar1`VARCHAR( 20 ) latin1_german2_ci
> NOT NULL) ENGINE=innodb

Leerzeichen sind in Tabellennamen nicht so super. Nimm den mal raus
und setz zwischen den Spaltennamen und den -typ je ein Leerzeichen.
mfg
Nico

--
www.buchtips.net - Rezensionen online

Re: CREATE TABLE

am 04.04.2007 10:17:36 von ToM80

On 3 Apr., 17:00, Nico Haase wrote:
> Hallöchen,
> *ToM80* schrub:
>
> > Hier der Aufruf:
> > create table test.tbl_test 3 (`testID`TINYINT( 2 ) NOT NULL
> > AUTO_INCREMENT PRIMARY KEY, `TestVar1`VARCHAR( 20 ) latin1_german2_ci
> > NOT NULL) ENGINE=3Dinnodb
>
> Leerzeichen sind in Tabellennamen nicht so super. Nimm den mal raus
> und setz zwischen den Spaltennamen und den -typ je ein Leerzeichen.
> mfg
> Nico
>
> --www.buchtips.net- Rezensionen online

Hi Nico,

welches Leerzeichen? Das "_" hinter tbl?
Habe damit noch nie Probleme gehabt. Habe mittlerweile auch so weit
debugged, dass die Tabelle mit den Feldern angelegt wird. Allerdings
scheint es nicht zu klappen eine Tabelle datenbankübergreifend
anzulegen, also wenn ich z. B. in der Datenbank PROBE angemeldet bin,
dann eine Tabelle in der Datenbank TEST zu erstellen.
Muss ich wirklich, mich erst ummelden? Oder gibt es einen Workaround
für den Aufruf "datenbank.tabelle" der bei CREATE anscheinend nicht
funktioniert?

Grüße
ToM

Re: CREATE TABLE

am 04.04.2007 10:28:26 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: CREATE TABLE

am 04.04.2007 10:33:45 von Knut Kohl

Hallo,

ToM80 schrieb am 04. Apr 2007 in de.comp.datenbanken.mysql:

>>> create table test.tbl_test 3 (`testID`TINYINT( 2 ) NOT NULL
>>> AUTO_INCREMENT PRIMARY KEY, `TestVar1`VARCHAR( 20 ) latin1_german2_ci
>>> NOT NULL) ENGINE=innodb
>>
>> Leerzeichen sind in Tabellennamen nicht so super.

> welches Leerzeichen? Das "_" hinter tbl?

Nein, das zwischen "tbl_test" und "3"

> Habe damit noch nie Probleme gehabt. Habe mittlerweile auch so weit
> debugged, dass die Tabelle mit den Feldern angelegt wird.

Das würde mich bei dem Tabellennamen allerdings wundern...

> Allerdings
> scheint es nicht zu klappen eine Tabelle datenbankübergreifend
> anzulegen, also wenn ich z. B. in der Datenbank PROBE angemeldet bin,
> dann eine Tabelle in der Datenbank TEST zu erstellen.
> Muss ich wirklich, mich erst ummelden?

Nicht ummelden, einfach die richtige Datenbank auswählen.

http://de3.php.net/manual/de/function.mysql-select-db.php

> Oder gibt es einen Workaround
> für den Aufruf "datenbank.tabelle" der bei CREATE anscheinend nicht
> funktioniert?

> Grüße
> ToM

Knut

--
Newsoffice.de - Die Onlinesoftware zum Lesen und Schreiben im Usenet

Re: CREATE TABLE

am 04.04.2007 11:41:26 von Axel Schwenke

"ToM80" wrote:

> Ich versuche mittels PHP eine Tabelle zu erstellen, jedoch bekomme ich
> dort immer Fehlermeldungen. Erst gab es ein Fehler 1064, dann den
> Fehler 1103 (Incorrect table name 'test.tbl_test3').
> Problem ist, ich muss die Tabelle in einer DB erstellen, die
> ausserhalb der aufgerufenen DB existiert.

Das ist überhaupt kein Problem.

> Wenn ich das ganze in das SQL-Fenster bei phpmyadmin eingebe kommt
> aber wieder der Fehler 1064

> #1064 - 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 '3 (`testID`TINYINT( 2 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
> `TestVar1`VARCHAR( ' at line 1

Das ist doch eindeutig, oder?

> Hier der Aufruf:
> create table test.tbl_test 3 (`testID`TINYINT( 2 ) NOT NULL
> AUTO_INCREMENT PRIMARY KEY, `TestVar1`VARCHAR( 20 ) latin1_german2_ci
> NOT NULL) ENGINE=innodb

Die Wahl von Groß/Kleinschreibung, Quotes um Bezeichner und die
Verwendung von Leerzeichen macht ein Zufallsgenerator? Es gibt
einen "Obfuscated SQL" Wettbewerb, an dem du teilnehmen willst?

Mal ernst: für den SQL-Parser ist nach test.tbl_test der Name der
zu erzeugenden Tabelle zu Ende und er erwartet jetzt eine Tabellen-
definition. Statt dessen steht da 3. Und du wunderst dich, daß er
einen Syntax Error wirft?

> In PHP sieht das ganze so aus:



Du mußt noch viel lernen. Wie man lesbaren Code schreibt, z.B.
Aber vielleicht fängst du besser mit etwas einfacherem an, mit
korrekter (My)SQL Syntax:

http://dev.mysql.com/doc/refman/5.0/en/create-table.html
http://dev.mysql.com/doc/refman/5.0/en/identifiers.html


XL

Re: CREATE TABLE

am 04.04.2007 14:05:25 von Florian Laws

On 2007-04-04, Andreas Kretschmer wrote:
> begin ToM80 schrieb:
>> Muss ich wirklich, mich erst ummelden? Oder gibt es einen Workaround
>
> Offensichtlich.

Nein.

>> für den Aufruf "datenbank.tabelle" der bei CREATE anscheinend nicht
>> funktioniert?
>
> Das funktioniert, mit einer Einschränkung, in PostgreSQL. Die
> Einschränkung ist, das mit foo.bar foo als Schema angesprochen wird.
> MySQL kennt aber keine Schemas, und DB-übergreifend wird dann wohl nicht
> gehen, aber das ist nur eine Vermutung meinerseits.

Natürlich geht es auch in MySQL, wenn man denn die richtige Syntax
verwenden würde:

mysql> create database foo;
Query OK, 1 row affected (0.00 sec)

mysql> create database bar;
Query OK, 1 row affected (0.00 sec)

mysql> use bar;
Database changed
mysql> create table foo.mytable (i INT);
Query OK, 0 rows affected (0.06 sec)

mysql> create table foo.`my space table` (i INT);

Query OK, 0 rows affected (10.78 sec)

mysql> use foo;
Database changed

mysql> show tables;
+----------------+
| Tables_in_foo |
+----------------+
| my space table |
| mytable |
+----------------+
2 rows in set (0.00 sec)


Grüße,

Florian

Re: CREATE TABLE

am 04.04.2007 20:47:58 von ToM80

> mysql> create table foo.`my space table` (i INT);

Hi Florian,

thx, genau hier war mein "Denk"Fehler. Ich hatte das Backtag vor und
nicht nach der Datenbank gesetzt.

Für alle anderen, sry dass ich ausversehen ein Leerzeichen hinter den
Tabellennamen und vor die 3 geschrieben hatte. Das war nicht der
Originalcode, welcher mit PHP Variablen aufgebaut ist und von daher
schon gar kein Leerzeichen im Tabellennamen vorkommen kann.
Ich werd mir aber, falls ich tatsächlich noch einmal Hilfe bräuchte,
mich bemühen meinen Code syndaktisch korrekt und 3x geprüft bereit
zustellen.

Grüße

ToM