更新如果存在或插入如果在wordpress中不存在

时间:2015-05-17 15:39:11

标签: php jquery mysql ajax wordpress

我正在使用WordPress并且只想在不存在的情况下插入行,并且如果它存在于当前用户我希望使用新值更新。下面的代码在ajax调用中没有获取结果或null,控制台也没有显示任何错误。如果我运行插入更新查询alonge它们工作但是当像这样一起使用时它们不会显示任何结果。我使用ajax将结果简单地传递给div。所以我只是在这里粘贴PHP代码。

PHP代码

add_action( 'wp_ajax_star', 'star' );
add_action( 'wp_ajax_nopriv_star', 'star');


    function star()
    {
        //variables

        $user_info = wp_get_current_user();
        $user=$user_info->user_login;
        $passedvalue = $_POST['clickval'];
        $competition = $_POST['compete'];
        $aid = $_POST['foo'];
        global $wpdb;    
        //$sqll = "SELECT zvotes.zvotes FROM zvotes WHERE zvotes.votedby = '$user' && zvotes.zcompetition = '$competition'";
        $previous = $wpdb->get_var("SELECT zvotes.zvotes FROM zvotes WHERE zvotes.votedby = '$user' && zvotes.zcompetition = '$competition'");

        if(count($previous)>0){

            $wpdb->update('zvotes', array('zvotes'=>$passedvalue), array('votedby'=>$user, 'competition'=>$competition));

            echo json_encode("there is a previous entry");die();}    

        $wpdb->insert(
            'zvotes',
            array(
                    'zvotes' => $passedvalue,
                    'zcompetition' => $competition,
                    'aid' => $aid,
                    'votedby' => $user
                ));

        echo json_encode("insert works");die();

    }

3 个答案:

答案 0 :(得分:0)

在MySQL中,语法为insert . . . on duplicate key update。您需要在用于定义变量的列上使用唯一键。我猜它是这样的:

create unique index idx_zvotes_votedby_competition on zvotes(voted_by, zcompetition);

然后代码看起来像这样:

insert into zvotes (voted_by, zcompetition, zvotes)
    select $voted_by, @zcompetition, $zvotes
on duplicate key update zvotes = zvotes + value(zvotes);

您不清楚数据结构,因此这是您可能需要的近似值。

答案 1 :(得分:0)

使用$wpdb->replace('table_name',[ 'column' => 'value', 'column2'=> 12], ['%s','%d']);

https://codex.wordpress.org/Class_Reference/wpdb#REPLACE_row

答案 2 :(得分:0)

您可以尝试使用 $wpdb->update 更新表,我在以下代码中使用了 id,但您可以使用任何条件。

$result = $wpdb->update($tableName, $info, array('id' => $info["id"]));
//If nothing found to update, it will try and create the record.
if ($result === FALSE || $result < 1) {
    $wpdb->insert($tableName, $info);
}

Update() 结果输出

  • $result === FALSE : 失败
  • $result === 0 :成功,但没有更新
  • $result > 1:成功并更新