it-swarm.com.de

Muss in benutzerdefinierten Tabellen das Präfix $ wpdb-> verwendet werden?

Entschuldigung, wenn diese Frage trivial ist. Ich fange gerade an, Plugins in WordPress zu entwickeln.

In allen Tutorials habe ich Folgendes gefunden: Beim Erstellen der benutzerdefinierten Tabellen wird $wpdb->prefix verwendet.

Beispiel:

$table_name = $wpdb->prefix . "liveshoutbox";

Meine Frage:

Ist die Verwendung von $wpdb->prefix obligatorisch? Was passiert, wenn ich kein Präfix für meine benutzerdefinierten Tabellen verwende?

15
newbie

Es ist obligatorisch, wird jedoch nicht erzwungen.

Stellen Sie sich das Szenario vor, in dem zwei Wordpress-Sites in derselben Datenbank eingerichtet wurden. Eines mit Präfix wp_ und eines mit wp2_. Wenn Sie Ihr Plugin an beiden Standorten mit dem Präfix installieren, lauten Ihre erstellten Tabellen wp_liveshoutbox für den ersten Standort und wp2_liveshoutbox für den zweiten Standort. Wenn Sie jedoch das Präfix weglassen, verwenden beide Sites dieselbe Tabelle mit dem Namen liveshoutbox, und das Ganze löst sich auf.

21
sakibmoon

Folgendes berücksichtigen:

Ihr Plugin wird in einem WordPress-Netzwerk verwendet, das für jede Site unterschiedliche Tabellenpräfixe verwendet. Ihr Plugin kann gleichzeitig auf 836 verschiedenen Sites in derselben Datenbank ausgeführt werden. wp_385677_liveshoutbox ist ein durchaus vernünftiger Tabellenname.

Ihr Plugin wird von einem Benutzer installiert, der ein gewisses Sicherheitskonzept hat und das Tabellenpräfix geändert hat, um Bots zu blockieren, die versuchen, select * from wp_users in das System einzufügen. Selbst wenn sie eine neue Sicherheitslücke finden, wird dies nicht funktionieren.

Verknüpfungen wie das Hardcodieren von Tabellennamen sind eine gute Möglichkeit, ein Produkt zum Laufen zu bringen, aber keine gute Möglichkeit, es freizugeben. In kürzester Zeit wird das Plugin eine Menge "Funktioniert nicht" -Kommentare enthalten. Im schlimmsten Fall wird die Site eines anderen beschädigt.

Wenn ich eine komplexe Abfrage habe und mich nicht mit dem Problem des Schreibens von 'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id .... auseinandersetzen möchte, können Sie Ersatzzeichen verwenden. Zum Beispiel:

$query = 'select foo from %table% left join %meta% on %table%.ID = %meta%.meta_id ... ';

$change = array (
    '%table%' => $wpdb->prefix . '_mytable',
    '%meta%'  => $wpdb->prefix . '_mytablemeta'
    );


$sql = str_replace( array_keys( $change ), array_values( $change ), $query );

$results = $wpdb->get_results( $sql );

Wordpress ändert sich ständig. Was heute "funktioniert", kann morgen nicht funktionieren. Deshalb gibt es API-Funktionen. Die Wordpress-Entwickler werden sicherstellen, dass das öffentliche API-Verhalten konsistent ist (oder sie werden die Funktion abwerten). Wenn Sie anfangen, interne Methodenaufrufe zu verwenden, weil es auf diese Weise "schneller" ist, kommt es normalerweise wieder, um Sie zu beißen. Es gibt nur sehr wenige echte Verknüpfungen in der Software - sie verlagern nur die erforderliche Arbeit von jetzt zu später und wie Ihre Kreditkarte "später" kostet in der Regel mehr.

4
paul