Ich liebe Wordpress.
Aber die Datenbank-Struktur von Wordpress, die hasse ich. Die ist soooo weit von relational entfernt, das ist unglaublich. Da kriegen Datenbank-Profis schon Kopfweh wenn sie sich nur auf 100 Schritte nähern.
Heute wollt ich z.B. User aus einer Wordpress-Installation in eine andere Übernehmen. Schaut auf den ersten blick ganz einfach aus: Inhalt der Tabelle wp_user kopieren in die Datenbank des anderen Wordpress. Dort ist der “table_prefix” anders eingestellt, drum heisst die Tabelle dort wp_kids_users.
Auf den zweiten Blick seh ich: ich muss auch wp_usermeta kopieren auf wp_kids_usermeta.
Und dann kommt das dicke Ende: Mit der Fehlermeldung “You do not have sufficient permissions to access this page” bzw. “Ihre Zugriffsrechte reichen nicht aus, um diese Seite zu anzuzeigen.” verweigert das Wordpress-Backend den Zugriff.
Der Grund: In der Tabelle wp_kids_usermeta wird der Tabellen-Prefix auch verwendet:
Nach Schlüssel sortieren:
| umeta_id |
user_id |
meta_key |
meta_value |
| 1 |
1 |
nickname |
bjelli |
| 2 |
1 |
rich_editing |
true |
| 3 |
1 |
wp_kids_capabilities |
a:1:{s:13:”administrator”;b:1;} |
| 4 |
1 |
wp_kids_user_level |
10 |
| 5 |
1 |
first_name |
Brigitte |
| 6 |
1 |
last_name |
Jellinek |
D.h. bei Veränderung des Tabellennamens muss auch der Inhalt der Tabelle verändert werden, damit Wordpress weiterhin funktioniert:
UPDATE {$newprefix}usermeta SET meta_key = “{$newprefix}capabilities” WHERE meta_key = “{$oldprefix}capabilities”;
UPDATE {$newprefix}usermeta SET meta_key = “{$newprefix}user_level” WHERE meta_key = “{$oldprefix}user_level”;
Liebe Leute: nehmt Euch Wiordpress nicht als Vorbild für Datenbank-Design, macht das nicht nach. Schön ist anders.
Recent Comments