Seite 1 von 1

phpMyAdmin:nur nicht bereits exist. Datensätze importieren?

Verfasst: 05.11.2006 11:58
von testit
Hallo,

viele von Euch arbeiten sicher ebenfalls mit phpMyAdmin.

Folgende Frage:

Ich will eine Tabelle - bspw. Topics - aus einer DB A exportieren und anschliessend in einer anderen DB B importieren. Allerdings sollen dann in der DB B nur diejenigen Datensätze eingefügt werden, die in DB B noch nicht existieren.

Wenn ich zuvor beim Exportieren NICHT "Fehlerübergehenden INSERT-Befehl verwenden" markiert habe, wir ja bereits beim ersten in DB B importierten Datensatz angemeckert, dass dieser bereits existiert und der weitere Importvorgang abgebrochen. Leider nutzt es nichts, wenn ich beim Exportieren "Fehlerübergehenden INSERT-Befehl verwenden" aktiviere, weil dann sämtliche Datensätze in DB B eingefügt werden, selbst wenn diese dort schon existieren.

Gibt es da irgendeinen Trick mit phpMyAdmin? Oder lässt sich so etwas mit phpMyAdmin nicht realisieren?

Danke und Gruss
testit

Verfasst: 05.11.2006 13:41
von Miriam
Wenn du die SQL Abfragen (mit phpBB_-Präfix) hast, würde ich Dir den DB-Update-Generator empfehlen.
Da wird jede Query ausgeführt und die INSERTS, die nicht klappen, geben einen Fehler. Die anderen werden eingefügt.

Ansonsten musst Du ein extra Script schreiben, dass in der DB prüft, ob der Eintrag schon da ist.

Verfasst: 05.11.2006 15:29
von testit
Hallo,

vielen Dank fuer den Hinweis auf dieses Script.

Allerdings funktioniert es bei mir vom ACP aus nicht, sondern nur, wenn ich es "normal" im phpBB-root-Verzeichnis aufrufe.

Das entstehende db_update.php mit den SQL-Befehlen etc. habe ich anschliessend in das phpBB-root-Verzeichnis hinein kopiert und als Admin eingeloggt aufgerufen.

Ergebnis: Leerer Bildschirm, das Programm legt offenbar nicht mal los mit dem Updaten, obwohl meiner Meinung nach im db_update.php alles stimmt:

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//


if( !$userdata['session_logged_in'] )
{
	$header_location = ( @preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')) ) ? 'Refresh: 0; URL=' : 'Location: ';
	header($header_location . append_sid("login.$phpEx?redirect=db_update.$phpEx", true));
	exit;
}

if( $userdata['user_level'] != ADMIN )
{
	message_die(GENERAL_MESSAGE, 'You are not authorised to access this page');
}

$page_title = 'Updating the database';
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
...
Gruss
testit

Verfasst: 05.11.2006 15:51
von Mahony
Hallo
Ändere mal das hier

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
in das hier

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = './';
include_once($phpbb_root_path . 'extension.inc');
include_once($phpbb_root_path . 'common.'.$phpEx);
und versuchs dann nochmal.




Grüße: Mahony

Verfasst: 05.11.2006 15:53
von Miriam
Ja, es ist ein eigenständiges Updatescript. Muss also direkt in der URL aufgerufen werden.

Hast Du denn versucht, es mit ein paar Befehlen zu starten, ob es überhaupt läuft?

Es kann sein, dass der Speicher nicht reicht, weil alles in ein Array geladen wird. Aber der Server keine Fehlermeldung ausgibt bzgl. des Speichers.

Verfasst: 05.11.2006 16:44
von testit
Hallo,

danke fuer Eure Tipps, aber es lag an etwas anderem:

Das Script liest aus der Topics-Tabelle die Titel aus, die teilweise auch Anführungszeichen enthalten, wenn die user diese im Titel verwendet hatten (sowohl " als auch ").

Der erzeugte db_update.php-Code escaped die QUOTES nicht, sondern übergibt die " direkt in die upzudatende Datenbank, die dann meckert.

db_generator.php sollte man folglich noch ein wenig überarbeiten, wenn man damit öfters arbeiten möchte.

Nette Grüsse
testit