Erstellen von zwei databasetabellen über das Plugin

Ich arbeite an einem Voting-Plugin für meine Website und ich möchte 2 Tabellen erstellen: eine, die Abstimmungen speichert und eine andere, die Wähler-ips speichert.

In Codex schlägt es vor, eine if-statement zu verwenden, um zu sehen, ob die Tabelle bereits bei der Installation des Plugins erstellt wurde, aber wie kann ich den Code ändern, wenn ich zwei Tabellen erstelle?

Dies ist meine if-statement in der Plugin-Installationsfunktion, die derzeit so eingestellt ist, dass überprüft wird, ob bereits 1 Tabelle existiert.

... $table_name1 = $wpdb->prefix . "voters_ip"; $table_name2 = $wpdb->prefix . "vote_posts"; $installed_ver = get_option( "postvote_version" ); if($wpdb->get_var("show tables like '$table_name'") != $table_name1) { //unsure how to add both tables $sql = "CREATE TABLE " . $table_name1 . " ( id bigint(20) NOT NULL AUTO_INCREMENT, vote_post_id bigint(20) NOT NULL, voter_ip varchar(100) NOT NULL, UNIQUE KEY id (id) );"; $sql = "CREATE TABLE " . $table_name2 . " ( id bigint(20) NOT NULL AUTO_INCREMENT, vote_post_id bigint(20) NOT NULL, up int(11) NOT NULL, ddown int(11) NOT NULL, UNIQUE KEY id (id) );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); add_option("postvote_version", $postvote_version); } .... 

Wie überprüfe ich, ob beide Tabellen existieren?

Solutions Collecting From Web of "Erstellen von zwei databasetabellen über das Plugin"

Grundlegende Programmiertechniken, die Sie vor dem Erstellen eines Plugins gelernt haben sollten:

  1. Sie können Prüfungen mit && (und) und || verketten (oder).
  2. Sie können (und sollten) jede CREATE Abfrage mit einer eigenen Prüfung überwachen

SQL-Syntax, die Sie sich vor dem Schreiben von Abfragen selbst angesehen haben sollten:

  • WENN NICHT EXISTIERT

Bitte beachten Sie, dass Sie diese Tabellen beim Deinstallieren / Löschen des Plugins löschen müssen .

PS: Nichts für ungut, aber es sieht so aus, als ob du es kopiert hast, ohne zu wissen, was der Code tut. Bitte beachten Sie, dass Sie dadurch die Installation anderer Leute riskieren, wenn Sie dies in einem Plugin tun!

Ich habe nur einen flüchtigen Blick auf Ihren Code geworfen, aber Sie haben mindestens drei Probleme.

Das erste ist sicherheitsbezogen:

 CREATE TABLE " . $table_name1 . " 

Sie wissen nie, welche Art von Müll Ihre function erhalten könnte, also schreiben Sie es besser so:

 CREATE TABLE `" . str_replace('`', '', $table_name1) . "` 

Die zweite ist SQL-bezogen und bereits hervorgehoben:

 CREATE TABLE 

Sollte sein:

 CREATE TABLE IF NOT EXISTS 

Das letzte und wichtigste ist die PHP-Syntax. Der zweite Aufruf an:

 $sql = 

Sollte sein:

 $sql .= 

Andernfalls erstellen Sie niemals die erste Tabelle. Je.

Wie bereits in einer früheren Nachricht erwähnt, ist es empfehlenswert, die Version Ihres Plugins oder seiner Tabellen in einer Option zu speichern. Dies ermöglicht es, es einfacher zu aktualisieren, wenn sich seine eigenen Optionen und sein Schema ändern.

Wenn Sie eindeutige Tabellennamen verwenden, können Sie mit einiger Sicherheit davon ausgehen, dass Tabelle 2 vorhanden ist, wenn Tabelle 1 vorhanden ist. Also würde ich nur nach der Existenz von 1 suchen und, wenn es da ist, die Skripte überspringen … wenn nicht, führe die Skripte aus.

Sie können auch eine Option deaktivieren, die Sie für Ihr Plug-In festgelegt haben:

  • Wenn die Option existiert ( get_option('my-voting-version') ), ist Ihr Plugin installiert und Sie müssen Ihre databaseskripte nicht ausführen.
  • Wenn die Option nicht vorhanden ist, führen Sie Ihre Skripts aus, und legen Sie die Option so fest, dass sie nicht zweimal ausgeführt werden.

Selbst wenn das Plug-in entfernt wird, bleibt die Option erhalten, wenn Sie es erneut aktivieren, werden Sie die Tabellen nicht neu schreiben. Wenn Sie Ihre databaseversion speichern und darauf basierende Skripts ausführen, können Sie Upgrades verwalten. Anschließend können Sie Upgrade-Skripts selektiv basierend auf der für die Site zuvor vorhandenen Tabellenversion ausführen.