我正在使用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();
}
答案 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
:成功并更新