web-dev-qa-db-fra.com

insérer des données dans la table de base de données à partir du plugin avec WP3.1

Je suis assez nouveau dans WP Plugin World. J'essaie de développer un plugin dans WP 3.1 lorsque j'essaie d'insérer des données dans ma table nommée "wp_enam" de la manière suivante:

$wpdb->insert($wpdb->enam, array('username' => "enam" ,
                                 'useremail' => "[email protected]"));

ça ne marche pas.

J'essaye de le déboguer de la manière suivante:

$wpdb->show_errors();
$wpdb->insert($wpdb->enam, array('username' => "enam" ,
                                 'useremail' => "[email protected]"));
$wpdb->print_error(); 

Maintenant, je reçois le message suivant de MR.WP

WordPress database error: [Incorrect table name '']
INSERT INTO `` (`username`,`useremail`) VALUES ('enam','[email protected]')

WordPress database error: [Incorrect table name '']
INSERT INTO `` (`username`,`useremail`) VALUES ('enam','[email protected]')

Comme vous pouvez le constater, le nom de la table ne s'affiche pas dans la requête mysql. Est-ce une manière correcte d'accéder à un nom de table avec $wpdb->my_table? J'utilise mysql . Merci d'avance.

Edit 1: On dirait que $wpdb->tblnamen'ajoute plus le préfixe de table! Selon "Professional WordPress Wrox" de Hal Stern, David Damstra et Brad Williams "(qui est un excellent livre), cela devrait fonctionner. La fonctionnalité ci-dessus est expliquée dans ce livre de la manière suivante:

$wpdb->my_custom_table to reference the table in WordPress. 
This translates to wp_my_custom_table if wp_ is the table prefix. 
This is the proper way to determine the correct table prefix when working with tables in the WordPress database.

( Page: 107 )

4
enam

Vous pouvez vérifier la fonction de base de données pour la base de données ici http://codex.wordpress.org/Function_Reference/wpdb_Class . Pour le préfixe de table, vous devez utiliser $wpdb->prefix . 'enam' et il renverra le préfixe de table. Ajoutez simplement le nom de la table avec ceci. Le code total serait donc:

$yourtablename =  $wpdb->prefix . 'enam';

donc votre code total pourrait être quelque chose comme:

$wpdb->insert($yourtablename , array('username' => "enam" ,
                             'useremail' => "[email protected]"));

EDIT: Si vous avez besoin de plus d’informations, vous pouvez voir THIS article. Cet article est très utile pour créer un plugin avec une base de données.

5
user4254

Vous devriez utiliser quelque chose comme

$wpdb->prefix . 'table_name'

au lieu.

Si vous ne voulez pas répéter le nom de votre table dans votre code, enregistrez-le dans une variable ou créez une fonction comme celle-ci: (rien de bien, mais je l’utilise de cette façon, fonctionne si vous n’avez qu’un tableau personnalisé, alors ce n'est pas très polyvalent ..)

function get_table_name() {
    global $wpdb;
    return $wpdb->prefix . 'table_name';
}
3
depi

Je pense que le wpdb-> enam est incorrect, il n’existe pas, il suffit de taper nom de table ici.

$wpdb->insert("table_name", array('username' => "enam" ,
                             'useremail' => "[email protected]"));
0
Patriek