我只是this code 从$wpdb Codex页,并修改了我现有的插入查询:
$table = $wpdb->prefix . \'user_req\';
$post_id = explode(\'_\', $_POST[\'post_id\']);
$user_id = $_POST[\'user_id\'];
$wpdb->insert(
$table,
array(
\'user_id\' => $user_id,
\'post_id\' => $post_id[1]
),
array(
\'%d\',
\'%d\'
)
);
进入:
$wpdb->query( $wpdb->prepare(
"
INSERT INTO {$wpdb->prefix}user_req
( user_id, post_id )
VALUES ( %d, %d )
ON DUPLICATE KEY UPDATE
user_id = VALUES(user_id), post_id = VALUES(post_id)
",
$user_id,
$post_id[1]
) );
因为我需要
prevent the duplicate entries 进入数据库。但是,当插入查询正常运行时,重复条目仍会进入数据库。添加
ON DUPLICATE KEY UPDATE
部分,我按照
s_ha_dum\'s Answer 在另一个线程上。
我做错了什么?
最合适的回答,由SO网友:Mayeenul Islam 整理而成
这是我的错。在@Otto的评论后得到了解决方案:
你这里真的有重复的钥匙吗?user\\u req的结构是什么?键和索引是什么?
下面是我的SQL查询的方式:
INSERT INTO {$wpdb->prefix}user_req
( user_id, post_id )
VALUES ( %d, %d )
WHERE NOT EXISTS (
SELECT * FROM
{$wpdb->prefix}user_req.user_id = user_id
AND
{$wpdb->prefix}user_req.post_id = post_id
)
现已修复。多亏了奥托。
更新尽管我说过,它已经解决了,但实际上,它还没有解决。代码不知何故无法工作,甚至无法插入数据(Details here). 因此,在我从其他人那里获得的知识和我的同事阿里夫·哈克先生的帮助下,我提出了两个不同但相互关联的问题:
$alreadyGot = $wpdb->get_results(
"SELECT
COUNT(*) AS TOTALCOUNT
FROM {$table}
WHERE ( user_id = $user_id AND post_id = $post_id[1] )
AND ( order_id = \'\' )"
);
$count = $alreadyGot[0]->TOTALCOUNT; //if there\'s any duplicate, it\'d return 1
// if the count return 1, do nothing, but else insert the data
if( $count > 0 ) {
//do nothing
} else {
$wpdb->insert(
$table,
array(
\'user_id\' => $user_id,
\'post_id\' => $post_id[1]
)
);
}