Ich habe viele Threads und Codex-Seiten durchgesehen und versucht, mit vielen Dingen herumzuspielen, aber mein Code scheint die Tabellen nicht zu erstellen. Und ich kann nicht herausfinden, wo ich falsch liege. Ich habe booking_db_version in der Datenbank überprüft, es wird aktualisiert, wenn ich es in der Datei aktualisiere.
Hier ist der Code
global $booking_db_version;
$booking_db_version = "1.0.0";
function booking_install() {
global $wpdb;
global $booking_db_version;
global $tableprefix;
$installed_version = get_option('booking_db_option');
$tableprefix = $wpdb->prefix . 'booking_';
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
if ( $installed_version !== $booking_db_version ) {
/* Create table for packages */
$packagetable = $tableprefix . 'packages';
$sql = "create table $packagetable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
description text NOT NULL,
city1 text NOT NULL,
city2 text NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
/* Create table for hotels */
$hoteltable = $tableprefix . 'hotels';
$sql = "create table $hoteltable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
city text NOT NULL,
price decimal(10,2) NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
/* Create table for addons */
$addontable = $tableprefix . 'addons';
$sql = "create table $addontable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
addongroup text NOT NULL,
price decimal(10,2) NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
/* Create table for addon groups */
$addongrouptable = $tableprefix . 'addon_groups';
$sql = "create table $addongrouptable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
perhead text NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
update_option('booking_db_version', $booking_db_version);
}
}
register_activation_hook(__FILE__, 'booking_install');
quelle
CREATE TABLE
führt, dass es fehlschlägt.PRIMARY KEY (id),
. dbDelta sagt tatsächlich, dass die Tabelle erstellt wird, obwohl dies nicht derPRIMARY KEY (id),
nachstehenden Komma ist ein SQL-Problem, kein DbDelta-Problem oder ein WP-Problem. Daher keine Dokumentation.dbDelta()
Ihre SQL-Anweisungen als Array übergeben können,dbDelta
anstatt siedbDelta
für jede Abfrage einzeln aufzurufen .Sie können diese Funktion ausprobieren :
quelle
Die Verwendung von 'CREATE TABLE' anstelle von 'create table' löste das Problem für mich.
quelle
Neben all diesen wichtigen Punkten sollten Sie den Aktivierungshaken auslösen.
Während Sie Ihr Plugin entwickelt und den richtigen Code geschrieben haben, müssen Sie Ihr Plugin immer noch reaktivieren , um den Hook auszulösen, damit Ihre Tabelle erstellt wird, wenn das Plugin aktiviert wird.
quelle
SQL-Schlüsselwörter wie CREATE TABLE und UPDATE müssen in Großbuchstaben geschrieben werden. So ändern Sie die Zeile der Tabelle erstellen zu:
und
zu:
oder dieses:
zu:
und so weiter
quelle
CREATE TABLE
,CREATE DATABASE
,INSERT INTO
, undUPDATE
. Alles andere wird entweder nicht in einem Vergleich mit Groß- und Kleinschreibung verwendet oder in Kleinbuchstaben umgewandelt . Ihre Vorschläge haben keine Wirkung.