Zum Inhalt springen

Per funktion in extension ein ALTER TABLE durchführen

Erstellt am 16. Mai 2008 · 4 Antworten · letzte Antwort am 17. Mai 2008

Tags: Datenbank, Frage

sefer ·

Hi,

ich möchte einer Tabelle ein Feld hinzufügen falls dieser noch nicht existiert.

Wie muss der aufruf in der funktion lauten?

In der API habe ich diese Funktion gefunden
sql_query($query)

function sql_query($query)

Executes query
mysql_query() wrapper function
Usage count/core: 1
$query 	string 	Query to execute
Returns: 	pointer 	Result pointer / DBAL object

und so sieht meine funktion aus

<?php
function createTeams(){
$sql = 'ALTER TABLE `tx_cfcleague_teams` ADD saison_id INT ';
$this->$GLOBALS['TYPO3_DB']->sql_query($sql);

}	
?>

und so rufe ich diese in der main() auf:

$this->createTeams();

klapt aber nicht.
thx,
Sefer

digedag ·

Hi Sefer!

Warum willst du denn die Spalte dynamisch im Code hinzufügen? Diese Arbeiten erledigt doch eigentlich der ExtensionManager für dich.
Einfach in der Datei ext_tables.sql die Tabelle erweitern:

CREATE TABLE tx_cfcleague_teams (
  saison_id int(11) DEFAULT '0' NOT NULL,
);

Wenn du deine Extension dann im EM aufrufst, wird dir unter Information der Update der Datenbank angeboten.
Ist doch viel einfacher! 😉

sefer ·
digedag schrieb

Wenn du deine Extension dann im EM aufrufst, wird dir unter Information der Update der Datenbank angeboten.
Ist doch viel einfacher! 😉

Ich wußte gar nicht, dass das so funktioniert. Cool dann mache ich das mal so. 😃

Aber ich würde trotzdem gerne,wissen wie ich eine normale Query wie oben, per php ausführe.

thx,
Sefer

digedag ·
$this->$GLOBALS['TYPO3_DB']->sql_query($sql);

Also das wird definitiv nicht funktionieren. $this ist eine reservierte Variable und verweist auf dein aktuelles Objekt. $GLOBALS ist ebenfalls reserviert und stellt dir ein paar globale Variablen zur Verfügung.
Probier es mal damit:

$GLOBALS['TYPO3_DB']->sql_query($sql);
sefer ·

Jepp,
man brauch nur das in die Funktion eingeben und das Statement wird ausgeführt

$sql = "CREATE TABLE testsql (  `id` int(11) NOT NULL);";
$GLOBALS['TYPO3_DB']->sql_query($sql);

Danke digedag, aber ich war harscharf dran 😉
Das mit $this muss ich noch richtig lernen, bin ja noch am anfang.

mfg
Sefer