Artok, your concatenation is incorrect… You forgot to continue the pattern with your $charset_collate variable.
If we look at $query1
we see this:
PRIMARY KEY (ver_id)
) $charset_collate;";
What we should see is this:
PRIMARY KEY (ver_id)
)" . $charset_collate . ";";
You should also avoid giving your functions generic names, I recognize you may have just changed it to activate()
for the sake of not posting the actual name of your function here, but I see a lot of generic naming when I get work submitted to me and it creates conflicts.
function artok_activate(){
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
//$verb = new mysqli('localhost','root','root','test4');
$table_name1 = $wpdb->prefix . "Veranstaltung";
$table_name2 = $wpdb->prefix . "Personen";
$table_name3 = $wpdb->prefix . "Sponsor";
$table_name4 = $wpdb->prefix . "sponkunde";
//$wpdb->query("CREATE DATABASE eBagDB");
$query1 = "CREATE TABLE " . $table_name1 . "(
ver_id int(11) NOT NULL AUTO_INCREMENT,
VeranstaltungName varchar(255),
PRIMARY KEY (ver_id)
)" . $charset_collate . ";";
$query2 = "CREATE TABLE " . $table_name2 . "(
pers_id int(11) NOT NULL AUTO_INCREMENT,
Datum DATE,
Passwort varchar(255) UNIQUE,
Vorname varchar(255),
Nachname varchar(255),
Anrede varchar(255),
LoeschDatum DATE,
fkVer_id int(11),
FOREIGN KEY(fkVer_id) REFERENCES Veranstaltung(Ver_id),
PRIMARY KEY (pers_id)
)" . $charset_collate . ";";
$query3 = "CREATE TABLE " . $table_name3 . "(
sp_id int(11) NOT NULL AUTO_INCREMENT,
Code varchar(255),
Name varchar(255),
PRIMARY KEY (sp_id)
)" . $charset_collate . ";";
$query4 = "CREATE TABLE " . $table_name4 . "(
fkPers_id int(11),
fkSp_id int(11),
FOREIGN KEY(fkPers_id) REFERENCES Personen(pers_id),
FOREIGN KEY(fkSp_id) REFERENCES sponsor(sp_id)
)" . $charset_collate . ";";
/*$wpdb->query($query1);
$wpdb->query($query2);
$wpdb->query($query3);
$wpdb->query($query4);*/
//$ergCrDB = $wpdb->get_results($createDB, OBJECT);
//$ergCrTbVer = $wpdb->get_results($createTbVer, OBJECT);
/*$ergCrTbPers = $wpdb->get_results($createTbPers, OBJECT);
$ergCrTbSp = $wpdb->get_results($createTbPersSp, OBJECT);
$ergCrTbPersSp = $wpdb->get_results($createTbSponsor, OBJECT);*/
dbDelta($query1);
dbDelta($query2);
dbDelta($query3);
dbDelta($query4);
}
register_activation_hook(__FILE__,'artok_activate');
I hope this fixes the issue for you. 🙂
Update:
When I tested adding one of the tables to a plugin I’m working on that also registers custom tables on activation, it worked.
Here’s how the functions work for me:
function artok_db_create_tables() {
global $wpdb
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$charset_collate = $wpdb->get_charset_collate();
$table_name1 = $wpdb->prefix . 'Veranstaltung';
if( $wpdb->get_var( "SHOW TABLES LIKE '$table_name1'" ) != $table_name1 ) {
$table1_sql="CREATE TABLE " . $table_name1 . '(
ver_id int(11) NOT NULL AUTO_INCREMENT,
VeranstaltungName varchar(255),
PRIMARY KEY (ver_id)
)' . $charset_collate . ';';
dbDelta( $table1_sql );
}//table_name1
}
register_activation_hook( __FILE__, 'artok_db_create_tables' );
I’ve only run it once for the first table, but you would then just repeat the pattern. I’ve added a condition that first checks if the table already exists before attempting to add it a second time.