Erstellt nur eine Tabelle und nicht die andere

Ich habe diese function, um zwei Tabellen zu erstellen, wenn ich das Plugin aktiviere. Es wird nur die Tabelle wp_wpt_stats erstellt und nicht die Datei wp_wpt_list. Ich weiß, dass das dbdelta wählerisch ist, aber ich kann nicht sehen, was ich falsch mache.

global $wpt_db_version; $wpt_db_version = "1.0"; function wpt_install() { global $wpdb; global $wpt_db_version; $table_add_toplist = $wpdb->prefix . 'wpt_list'; $table_add_wptstats = $wpdb->prefix . 'wpt_stats'; $charset_collate = $wpdb->get_charset_collate(); //-----------------------table_one----------------------------------- if($wpdb->get_var('SHOW TABLES LIKE ' . $table_add_toplist) != $table_add_toplist){ $sql_one = 'CREATE TABLE ' . $table_add_toplist . '( id INT(11) UNSIGNED AUTO_INCREMENT, link_id INT(11), visitor_ip VARCHAR(15) click_at DATETIME NOT NULL, site_votes INT(11), on_page VARCHAR(255), UNIQUE KEY id (id) ) '. $charset_collate .';'; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql_one); } //-----------------------table_two----------------------------------- if($wpdb->get_var('SHOW TABLES LIKE ' . $table_add_wptstats) != $table_add_wptstats){ $sql_two = 'CREATE TABLE ' . $table_add_wptstats . '( id INT(11) UNSIGNED AUTO_INCREMENT, link_id INT(11), impressions INT(11), inclick INT(11), outclick INT(11), PRIMARY KEY (id) ) '. $charset_collate .';'; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql_two); } add_option("wpt_db_version", $wpt_db_version ); } register_activation_hook(__FILE__,'wpt_install'); 

Solutions Collecting From Web of "Erstellt nur eine Tabelle und nicht die andere"

dbdelta verlangt dbdelta :

  • Sie müssen jedes Feld in eine eigene Zeile in Ihrer SQL-statement einfügen.
  • Sie müssen zwei Leerzeichen zwischen den Wörtern PRIMARY KEY und der Definition Ihres Primärschlüssels haben.
  • Sie müssen das Schlüsselwort KEY anstelle seines Synonyms INDEX verwenden, und Sie müssen mindestens einen SCHLÜSSEL einschließen.
  • Sie dürfen keine Apostrophe oder Backticks um Feldnamen verwenden.
  • Feldtypen müssen alle Kleinbuchstaben sein.
  • SQL-Schlüsselwörter wie CREATE TABLE und UPDATE müssen Großbuchstaben sein.

Wenn wir auf Ihren Anruf schauen:

 $sql_one = 'CREATE TABLE ' . $table_add_toplist . '( id INT(11) UNSIGNED AUTO_INCREMENT, link_id INT(11), visitor_ip VARCHAR(15) click_at DATETIME NOT NULL, site_votes INT(11), on_page VARCHAR(255), UNIQUE KEY id (id) ) '. $charset_collate .';'; 

Wir können sehen, dass Sie kein Komma an das Ende jeder Zeile anhängen:

  link_id INT(11), visitor_ip VARCHAR(15) click_at DATETIME NOT NULL, 

Sie haben also ungültiges SQL, da visitor_ip am Ende kein Komma hat