webentwicklung-frage-antwort-db.com.de

Erstellen von zwei Datenbanktabellen über das Plugin

Ich arbeite an einem Abstimmungs-Plugin für meine Website und möchte zwei Tabellen erstellen: eine, in der Abstimmungen gespeichert sind, und eine, in der Abstimmungen gespeichert sind.

In Codex wird empfohlen, eine if-Anweisung zu verwenden, um festzustellen, ob die Tabelle bereits bei der Installation des Plugins erstellt wurde. Wie kann ich den Code ändern, wenn ich zwei Tabellen erstelle?

Dies ist meine if-Anweisung in der Plugin-Installationsfunktion, die derzeit festgelegt ist, um zu überprüfen, ob bereits eine 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);
   }

....

Wie kann man richtig prüfen, ob beide Tabellen existieren?

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

Der erste ist sicherheitsrelevant:

CREATE TABLE " . $table_name1 . "

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

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

Der zweite ist SQL-bezogen und bereits hervorgehoben:

CREATE TABLE

Sollte sein:

CREATE TABLE IF NOT EXISTS

Das Letzte und Wichtigste ist die Syntax von PHP. Der zweite Aufruf an:

$sql =

Sollte sein:

$sql .=

Sonst erstellen Sie niemals die erste Tabelle. Je.

Wie bereits in einer früheren Meldung erwähnt, empfiehlt es sich, die Version Ihres Plugins oder seiner Tabellen in einer Option zu speichern. Dies ermöglicht ein einfacheres Upgrade, wenn sich die eigenen Optionen und das Schema ändern.

8

Wenn Sie eindeutige Tabellennamen verwenden, können Sie mit hinreichender Sicherheit davon ausgehen, dass Tabelle 2 existiert, wenn Tabelle 1 existiert. Also würde ich nur auf die Existenz von 1 prüfen und, falls vorhanden, die Skripte überspringen ... falls nicht, die Skripte ausführen.

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

  • Wenn die Option vorhanden ist (d. H. get_option('my-voting-version')), ist Ihr Plug-in installiert und Sie müssen Ihre Datenbankskripts nicht ausführen.
  • Wenn die Option nicht vorhanden ist, führen Sie Ihre Skripts aus und legen Sie die Option fest, damit Sie sie nicht zweimal ausführen.

Auch wenn das Plug-In entfernt wird, bleibt die Option erhalten, sodass Sie die Tabellen nach der Reaktivierung nicht erneut schreiben. Durch das Speichern Ihrer Datenbankversion und das Ausführen von Skripten, die darauf basieren, können Sie auch Upgrades verwalten. Sie können dann selektiv Upgrade-Skripts ausführen, die auf der zuvor für die Site vorhandenen Tabellenversion basieren.

1
EAMann