Deutschland United States United Kingdom
ContentLion - Open Source CMS

Datenbank exportieren - Keys

Datenbank exportieren - Keys

Hat jemand ne Idee? :D
Ich will die Tabelle exportieren, alles soweit ok, außer die Keys.
Ich weiß nicht, wie ich die am Besten auslesen und in den String schreiben soll.^^

Geht net.^^
Naja, dann liest es aben nur aus. :D

Kann mir jem. sagen, was hier falsch ist?:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
$tables DataBase::Current()->getTables();
$sql "";

//Daten exportieren
foreach ($tables as $table) {
    $cols DataBase::Current()->getColumns("" $table); //print_r($cols);

    $sql .= "INSERT INTO `" $table "` (\r\n";

        $i 0;
        $fields = array();

        foreach ($cols as $col) {

            if ($i != 0) {
                $sql .= ", ";
            }

            $sql .= "`" $col->Field "`";
            $fields[] = $col->Field;

            $i++;
        }

    $sql .= "\r\n)\r\nVALUES\r\n";

        $rows DataBase::Current()->ReadRows("SELECT * FROM `" $table "`");

        $i 0;
        foreach ($rows as $row) {

        if ($i != 0) {
            $sql .= ", \r\n";
        }

        $sql .= "(";

            $i_ 0;
            foreach ($fields as $field) {

                if ($i_ != 0) {
                    $sql .= ", ";
                }

                $sql .= "'" $row->$field "'";

                $i_++;
            }

            $i++;
            $sql .= ")";

        }

    $sql .= "; \r\n\r\n"print_r($sql);

}


Es entsteht folgender Query:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO `contentlion_actionlists` (
`category`, `id`, `icon`, `destination`, `label`
)
VALUES
('userlist', '1', 'cross', '{VAR:HOST}admin/user.html?delete={VAR:ID}', 'Löschen'), 
('plugin_filelistwidget', '1', 'pencil', 'javascript:showRenameFileDialog('{VAR:FILE}')', 'Umbenennen'), 
('plugin_filelistwidget', '2', 'cross', '{VAR:HOST}admin/home.html?dir={VAR:DIR}&deletefile={VAR:FILE}', 'Löschen'), 
('menuedit', '1', 'bullet_arrow_up', '{VAR:HOST}admin/editmenu.html?menu={VAR:MENU}&moveup={VAR:ID}', 'Nach oben'), 
('menuedit', '2', 'bullet_arrow_down', '{VAR:HOST}admin/editmenu.html?menu={VAR:MENU}&movedown={VAR:ID}', 'Nach unten'), 
('menuedit', '3', 'cross', '{VAR:HOST}admin/editmenu.html?menu={VAR:MENU}&delete={VAR:ID}', 'Löschen'), 
('rolelist', '1', 'cross', '{VAR:HOST}admin/roles.html?delete={VAR:ID}', 'Löschen'), 
('translations', '1', 'pencil', '{VAR:HOST}admin/edittranslation.html?language={VAR:TOKEN}', 'Bearbeiten'), 
('translation_tokens', '1', 'pencil', 'javascript:showIFrameDialog('{VAR:TOKEN}',300,200,'{VAR:HOST}admin/language-token-editor.html?token={VAR:TOKEN}&language={VAR:LANGUAGE}&blank=true',true);', 'Bearbeiten');


Wo verdammt ist blos der blöde Fehler? :D

MySql-Fehlermeldung (Meckermeldung triffts wohl eher^^):

Quellcode

1
#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 '{VAR:FILE}')', 'Umbenennen'), ('plugin_filelistwidget', '2', 'cross', '{VAR:HOS' at line 6

Du solltest die Werte auch escapen ;-)

MySQL-Abfrage(n)

1
 'javascript:showRenameFileDialog('{VAR:FILE}')', 'Umb


Und du musst darauf achten, dass die Language-Variablen nicht automatisch ersetzt werden.

Ja, musst du immer machen wenn du was mit SQL machst ;-) Sonst bekommst SQL-Injektions

Danke, ich glaube jetzt gehts. ;)

@Struktur:
Habe gerade einen sehr schönen MySql-Befehl "SHOW CREATE TABLE" gefunden, in PhpMyAdmin funktioniert der einwandfrei, nur in ContentLion nicht. ^^ ;(
Weder mit Execute() noch mit ReadRow(): ;(

Weiteres Problem:
Ich realisiere das Backup als Task, was ist, wenn der User das allerdings abbricht? :/

Was genau heißt funktioniert nicht? Bekommst kein Ergebnis oder hast ne Fehlermeldung? ReadRows wäre übrigens das richtige ;-)

Das mit den Tasks müssten wir mal per Cronjob auslagern. Abbrechen an sich wäre egal, weil das Script ja weiterläuft. Das einzige was ein Problem werden könnte wär die max. Laufzeit des Scripts. Da musst du mit set_timeout_limit arbeiten.

Was genau heißt funktioniert nicht? Bekommst kein Ergebnis oder hast ne Fehlermeldung? ReadRows wäre übrigens das richtige ;-)

Das mit den Tasks müssten wir mal per Cronjob auslagern. Abbrechen an sich wäre egal, weil das Script ja weiterläuft. Das einzige was ein Problem werden könnte wär die max. Laufzeit des Scripts. Da musst du mit set_timeout_limit arbeiten.


@set_timeout_limit:
Habe ich bereits, aber wenn der Admin das in der php.ini deaktiviert hat, funktioniert das sowieso nicht.

@Abbrechen:
Nur wenn in der php.ini ignore_user_abord auf true gesetzt ist, ansonsten wird auch das Script meines Wissens beendet.
Und ja, Cronjob wäre gut, aber wer hat das schon groß. :D
Bei normalem Webspace ist meistens nur ein Crontab dabei (wenn überhaupt), aber wir müssten dafür eine Anleitung schreiben, da das Einrichten sehr kompliziert ist und nur Linux-Kenner das sonst könnten... :S

Ansonsten wäre es gut, wenn standartmäßig die Tasks wie jetzt normal abgearbeitet werden und sobald z.B. zum ersten Mal eine bestimmte Datei z.B. cronjobs.php aufgerufen wird (von Crontab), stellt sich das Ganze automatisch um. ;)

Übrigens:
Was mich noch aufregt:
Ich kann für die Template-Dateien kein "_" (Unterstrich) nutzen, da dieser ja rausgefiltert wird.
Dabei wird aber das Ganze immer unübersichtlich... :(
Wäre es möglich, die Unterstrichte zuzulassen? :D
plugin_pluginname_datei_datei-weiter

Danke im voraus! ;)
Und könntest du mal die Installationsdateien aktualisieren? ^^

Oder ich lass die Cronjobs von meinem Server aufrufen ;-) Müssen dann nur öffentlich zugänglich sein. Würde ja über den API-Key gehen.

Hmmm... :/
Dann gelten aber nicht die extra php.ini-Einstellungen... :/

z.B. ignore_user_abord ist dann vermutlich auf true gesetzt etc.

Jetzt weiß ich was du meinst. Da muss ich mir nochmal was einfallen lassen.

Ähnliche Themen