insert data in database table from plugin with WP3.1

I am quite new in WP Plugin World. I am trying to develop a plugin in WP 3.1 when I am trying to insert data into my table named “wp_enam” in the following way:

$wpdb->insert($wpdb->enam, array('username' => "enam" ,
                                 'useremail' => "myemail@somedomain.com"));

it is not working.

Read More

I try to debug it in following way:

$wpdb->show_errors();
$wpdb->insert($wpdb->enam, array('username' => "enam" ,
                                 'useremail' => "myemail@somedomain.com"));
$wpdb->print_error(); 

Now I am getting following message from MR.WP

WordPress database error: [Incorrect table name '']
INSERT INTO `` (`username`,`useremail`) VALUES ('enam','myemail@somedomain.com')

WordPress database error: [Incorrect table name '']
INSERT INTO `` (`username`,`useremail`) VALUES ('enam','myemail@somedomain.com')

As you can see the table name is not showing in the mysql query. Is this a correct way to access a table name with $wpdb->my_table? I am using mysql. Thanks in advance.

Edit 1:
Looks like $wpdb->tblnamedo not add the table prefix anymore! As per “Professional WordPress Wrox” by Hal Stern, David Damstra and Brad Williams” (which is a great book ) it should work. The above functionality is explained at this book in the following way:

$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)

Related posts

Leave a Reply

3 comments

  1. You can check database function for database here. For the table prefix matter you should use $wpdb->prefix . 'enam' and it will return the table prefix. Just add the table name with this. So the total code would be :

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

    so your total code could be something like:

    $wpdb->insert($yourtablename , array('username' => "enam" ,
                                 'useremail' => "myemail@somedomain.com"));
    

    EDIT:
    If you need more information you can see THIS article. This is very useful article for creating plugin with database.

  2. You should use something like

    $wpdb->prefix . 'table_name'
    

    instead.

    If you don’t wan’t to repeat your table name through your code save it in a variable or create a function like this one: (nothing cool, but I use it this way, works if you have just one custom table, so it is not very versatile..)

    function get_table_name() {
        global $wpdb;
        return $wpdb->prefix . 'table_name';
    }
    
  3. I think the wpdb->enam is incorrect, it doesnt exist , you just have to enter tablename there.

    $wpdb->insert("table_name", array('username' => "enam" ,
                                 'useremail' => "myemail@somedomain.com"));