Wie füge ich Daten in eine databasetabelle ein, wenn das Feld noch nicht erstellt wurde?

Angenommen, ich habe eine existierende Tabelle (die bereits in dB erstellt wurde), die die Benutzerregistrierung (ein Plugin) handhabt und Daten mit $ wpdB-> einfügt, wie folgt:

$success = $wpdb->insert( $wpdb->mytable, array( 'first_name' => $first_name, 'last_name' => $last_name, 'email' => $email, 'activation_key' => $activation_key, ), array('%s', '%s', '%s', '%s') ); 

Jetzt ist mein Problem, ich möchte ein anderes Feld zu meiner vorhandenen Tabelle in dB hinzufügen. Dieses Feld sollte auch eigene Daten haben. Was wäre die beste Vorgehensweise, um mit dieser Art von Situation umzugehen? Do $ wpdB-> class einfügen erstellt automatisch eine Spalte, wenn sie nicht da im dB ist? Angenommen, ich möchte einen Hobby-Feldnamen in die Einfügung einfügen:

  $success = $wpdb->insert( $wpdb->mytable, array( 'first_name' => $first_name, 'last_name' => $last_name, 'email' => $email, 'hobby' => $hobby, 'activation_key' => $activation_key, ), array('%s', '%s', '%s', '%s') ); 

Werden die “Hobby” -Daten automatisch mit einer neuen Spalte in den dB eingefügt? Wenn nicht, was wäre die einfachste und empfohlene Methode, dies zu tun? Danke für jede Hilfe.

Solutions Collecting From Web of "Wie füge ich Daten in eine databasetabelle ein, wenn das Feld noch nicht erstellt wurde?"

Nein, die Spalte muss vorhanden sein, bevor Sie Daten einfügen. Andernfalls schlägt die Abfrage fehl.

Sie sollten die SQL-Abfrage für die Tabellenerstellung bearbeiten, um sie an die neue Spalte anzupassen. Führen Sie es dann erneut über dbDelta() aus. dbDelta() vergleicht Ihre Abfrage und die Tabellenstruktur und erstellt nur die fehlenden Spalten.

Der beste Weg, um festzustellen, ob die databasestruktur aktuell ist, besteht darin, die Plugin-Version in einer Option zu speichern und sie mit der aktuellen Plugin-Version zu vergleichen.

Beispiel:

 class Awesome_Plugin { /** current plugin version */ public $version = 4.2; function __construct() { $this->create_table(); } function create_table() { global $wpdb; $installed_version = get_option( 'awesome_plugin_version' ); if ( $installed_ver !== $this->version ) { $sql = "CREATE TABLE $table_name ( id mediumint(9) NOT NULL AUTO_INCREMENT, time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, name tinytext NOT NULL, text text NOT NULL, url VARCHAR(100) DEFAULT '' NOT NULL, UNIQUE KEY id (id) );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta( $sql ); update_option( 'awesome_plugin_version', $this->version ); } } } $GLOBALS['awesome_plugin'] = new Awesome_Plugin; 

Sie können mehr im WordPress Codex lesen

Ein anderes Beispiel:

 /** * Register new database table */ add_action( 'init', 'register_litho_quiz_table', 1 ); add_action( 'switch_blog', 'register_litho_quiz_table' ); function register_litho_quiz_table() { global $wpdb; $wpdb->litho_quiz_results = "{$wpdb->prefix}quiz_results"; $wpdb->litho_quiz_questions = "{$wpdb->prefix}quiz_questions"; $wpdb->litho_quiz_choices = "{$wpdb->prefix}quiz_choices"; } /** * Create new database table */ function create_quiz_tables() { require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); global $wpdb; /* * The global $charset_collate contains the character set and * collation used by the native WordPress tables. Loosely, these * define the encodings of characters and how they are compared - * given that WordPress is used in many different languages it's * important to use the correct collation for your table. */ global $charset_collate; // Call this manually as we may have missed the init hook register_litho_quiz_table(); /* * log_id - the log ID. user_id - the user ID for whom the log corresponds. activity - the activity that occurred. object_id - the ID of the object (eg post ID, user ID, comment ID etc) that was the subject of the user's activity. object_type - the type of object (eg 'post', 'user', 'comment' etc). activity_date - the datetime of the activity. table --key-- --img(255)-- --string(255)-- resultsid resultsimg resultsdescription resultsid resultsimg resultsdescription table --key- --string-- questionid question questionid question questionid question table --key-- --foreign-- --foreign-- --img(255)-- --string(20)-- choiceid questionid resultid choiceimg choicetitle choiceid questionid resultid choiceimg choicetitle choiceid questionid resultid choiceimg choicetitle choiceid questionid resultid choiceimg choicetitle choiceid questionid resultid choiceimg choicetitle choiceid questionid resultid choiceimg choicetitle choiceid questionid resultid choiceimg choicetitle */ $sql_create_results = "CREATE TABLE {$wpdb->litho_quiz_results} ( results_id int(2) unsigned NOT NULL auto_increment, results_img longblob NOT NULL, results_description varchar, PRIMARY KEY (results_id) ) $charset_collate; "; dbDelta( $sql_create_results ); $sql_create_questions = "CREATE TABLE {$wpdb->litho_quiz_questions} ( question_id int(2) unsigned NOT NULL auto_increment, question_description varchar, PRIMARY KEY (question_id) ) $charset_collate; "; dbDelta( $sql_create_questions ); $sql_create_choices = "CREATE TABLE {$wpdb->litho_quiz_choices} ( choice_id int(2) unsigned NOT NULL auto_increment, choice_img longblob, choice_description varchar, question_id int(2) NOT NULL, results_id int(2) NOT NULL, results_description varchar NOT NULL, PRIMARY KEY (choice_id) FOREIGN KEY (question_id) REFERENCES items(question_id), FOREIGN KEY (results_id) REFERENCES items(results_id) ) $charset_collate; "; dbDelta( $sql_create_choices ); } // Create tables on plugin activation register_activation_hook( __FILE__, 'create_quiz_tables' );