I know this type of question has been asked over and over, but I couldn't find a solution for my problem, so I hope you can help me. I am using WP 3.3. and I have created a custom table. Now I want to insert some data into it, but I can't get it working. This is my code:

global $wpdb;
$table_name = $wpdb->prefix . "my_data";
$wpdb->insert($table_name, array(
            'my_id'     => NULL,
        'my_day'    => $day,
        'my_month'  => $month,
        'my_abbr'   => $abbr,
        'my_venue'  => $venue,
        'my_geo'    => $geo_one.", ".$geo_two,
        'my_artist' => $artist,
        'my_link'   => $link

I am trying to insert data for several hours now without luck. To my eyes the code is correct, but I guess I am just mussing something important here. Any pointers would be appreciated! Thank you

  • 4
    Use $wpdb->print_error(); in the next line to insert and check if it throws any errors.
    – tamilsweet
    Dec 27, 2011 at 5:07
  • Many thanks. $wpdb->show_errors() did not show anything but print_error() pointed exactly what the problem was! Nov 2, 2012 at 10:02

2 Answers 2


When $wpdb method doesn't perform as it should it is likely issue with resulting SQL query (because of wrong input or something else).

Follow wpdb reference in Codex for troubleshooting:

  • enable database error display via $wpdb->show_errors()
  • check what query is being formed and run via $wpdb->last_query

The wpdb-class does not have an insert method. It would be best if you didn't use the query; see the codex, and you don't find this function insert() - http://codex.wordpress.org/Class_Reference/wpdb

An example of inserting a custom table on WPDB; use a default CREATE TABLE-SQL Syntax and create with the query() of wpdb the table with your values.

        $table = $GLOBALS['wpdb'] -> prefix . 'my_data';
        $GLOBALS['wpdb'] -> query(
            "CREATE TABLE $table (
            called_by varchar(96) NOT NULL,
            my_name varchar(96) NOT NULL,
            my_type varchar(15) NOT NULL,
            first_call int(11) NOT NULL,
            arg_count tinyint(4) NOT NULL,
            file_name varchar(128) NOT NULL,
            line_num smallint NOT NULL,
            PRIMARY KEY (first_call, my_name) )"

To insert this source, use the register_activation_hook()-hook; only on activation, the plugin will install the table if it doesn't exist. On register_uninstall_hook() I delete custom tables.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.