在wordpress wpdb中返回插入的行ID

时间:2017-02-15 08:45:35

标签: php mysql wordpress

我想在wordpress的表中插入一些数据然后返回它的自动增加id值。

我这样做,但这两个都有错误:

INSERT INTO wp_sho_app_form (job_id, first_name, last_name) VALUES(1, 'Caldwell', 'Estrada'); 
SELECT LAST_INSERT_ID();

此代码字在MySql中很好,但是$wpdb我收到此错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   在第1行'SELECT LAST_INSERT_ID()'附近

我在$wpdb->query$wpdb->get_results之间调用此声明,但他们都有错误。 我出于某些原因不想使用$wpdb->insert,我应该使用这种类型的代码。

3 个答案:

答案 0 :(得分:3)

正确的方法是使用insert_id

$lastid = $wpdb->insert_id;

如果你有另外的查询,如果你有新的条目和大量的流量,它就不一致了。这可能会导致有线问题。

这只是在插入后才能使用它们。不要与框架作斗争。

答案 1 :(得分:0)

您可以运行自定义查询,然后运行另一个查询以选择表格中的最后一项。如果您使用的是独立的php文件,则需要包含wp-load.php文件以获取wordpress函数。

$query = "
    INSERT 
    INTO wp_sho_app_form 
    (job_id, first_name, last_name) 
    VALUES
    (1, 'Caldwell', 'Estrada')
";
$wpdb->query($query);
$query = "
    SELECT * 
    FROM wp_sho_app_form 
    ORDER BY col_id desc  
    LIMIT 1
";
$wpdb->query($query);

答案 2 :(得分:0)

wpdb无法进行多次查询。我最后找到的解决方案是使用direclty MySqli。我写了这两个函数来做到这一点。可能对sombody有用。因为在ajax wordpress中没有加载所以我检查发现 wp-config fle以获取连接的详细信息:

public static function run_query($query)
    {
        $wp_config_path = script_generator::get_wp_config_path();
        if($wp_config_path == null){
            echo 'Could not found wp_config file!';
            return;
        }
        require_once $wp_config_path;
        $mysqli = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
// Check connection
        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

        $result_count = 0;
        $result_set = array();
        if ($mysqli->multi_query($query)) {
            do {
                $current_result_count = 0;
                $current_result = array();
                if ($result = $mysqli->use_result()) {
                    while ($row = $result->fetch_row()) {
                        $current_result[$current_result_count] = $row;
                        $current_result_count++;
                    }
                    $result->close();
                }
                $result_set[$result_count] = $current_result;
                if ($mysqli->more_results()) {
                    $result_count++;
                }
            } while ($mysqli->next_result());
        }

        /* close connection */
        $mysqli->close();

        return $result_set;
    }

    function get_wp_config_path(){
        $dir = dirname(__FILE__);
        do {
            if( file_exists($dir."/wp-config.php") ) {
                return $dir."/wp-config.php";
            }
        } while( $dir = realpath("$dir/..") );
        return null;

    }