Frage

Ich arbeite an einem Abstimmungs -Plugin für meine Website und möchte 2 Tabellen erstellen: eines, das Stimmen speichert und eine, die Wähler -IPs speichert.

In Codex schlägt es vor, eine IF -Anweisung zu verwenden, um festzustellen, ob die Tabelle bereits beim Installieren des Plugins erstellt wurde, aber wie kann ich den Code ändern, wenn ich 2 Tabellen erstelle?

Dies ist meine IF -Anweisung in der Plugin -Installationsfunktion, die derzeit so eingestellt ist, ob bereits 1 Tabelle vorhanden ist.

...

   $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);
   }

....

Was ist der richtige Weg, um zu überprüfen, ob beide Tabellen vorhanden sind?

War es hilfreich?

Lösung

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

  1. Sie können Schecks mit && (und) und || verkettet (oder).
  2. Sie können (und sollten) jeden bewachen CREATE Abfrage mit eigenem Scheck abfragen

SQL -Syntax, die Sie sich vor dem Schreiben von Abfragen selbst untersuchen sollen:

Stellen Sie in einem verwandten Hinweis sicher, dass Sie diese Tabellen löschen, wenn das Plugin ist deinstalliert/gelöscht.

PS: Keine Straftat beabsichtigt, aber es tut Sieh so aus, als hättest du geklebt, ohne zu wissen, was der Code tut. Bitte beachten Sie, dass Sie durch dies in einem Plugin die Installationen anderer Personen riskieren!

Andere Tipps

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 Funktion erhalten könnte. Schreiben Sie sie also besser wie so:

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

Der zweite ist SQL verwandt und bereits hervorgehoben:

CREATE TABLE

Sollte sein:

CREATE TABLE IF NOT EXISTS

Das letzte und das Wichtigste ist PHP -Syntax. Der zweite Anruf an:

$sql =

Sollte sein:

$sql .=

Sonst werden Sie niemals den ersten Tisch erstellen. Je.

Schließlich ist es, wie in einer früheren Nachricht hervorgeht, eine gute Praxis, die Version Ihres Plugins oder der Tabellen in einer Option zu speichern. Dies ermöglicht es, es einfacher zu verbessern, wenn sich seine eigenen Optionen und sein Schema ändern.

Wenn Sie eindeutige Tabellennamen verwenden, können Sie mit einem angemessenen Vertrauen annehmen, dass Tabelle 2 vorhanden ist, wenn Tabelle 1 vorhanden ist. Ich würde also nur nach der Existenz von 1 suchen und, wenn es dort ist, die Skripte überspringen ... wenn dies nicht der Fall ist, führen Sie die Skripte aus.

Sie können auch eine Option ausschließen, die Sie für Ihr Plug-In festlegen:

  • Wenn die Option besteht (dh get_option('my-voting-version')) Dann ist Ihr Plug-In installiert und Sie müssen Ihre Datenbankskripte nicht ausführen.
  • Wenn die Option nicht vorhanden ist, führen Sie Ihre Skripte aus und stellen Sie die Option ein, damit Sie sie nicht zweimal ausführen.

Selbst wenn das Plug-In entfernt wird, bleibt die Option, wenn es reaktiviert wird, die Tabellen nicht neu. Wenn Sie Ihre Datenbankversion speichern und Skripte basierend darauf ausführen, erhalten Sie auch die Möglichkeit, Upgrades zu verwalten. Sie können dann selektiv Upgrade -Skripte basierend auf der zuvor für die Site vorhandenen Tabellenversion selektiv ausführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top