使用重复键检查更新/插入的wpdb查询

时间:2015-02-12 16:11:56

标签: php wordpress wpdb

我正在尝试使用下面的查询在我的wp_postmeta表中插入一行。如果此行已存在,例如meta_id键不唯一,我需要它在查询结尾处使用meta_value更新此行。

这是我到目前为止所拥有的

$wpdb->insert( 'wp_postmeta', array('post_id' => $productID[0], 'meta_key' => 'custom_field', 'meta_value' => 'worked'), array("%d","%s","%s") . " ON DUPLCIATE KEY UPDATE meta_value = changed " );

但这是我上次查询的结果:

string(226) "INSERT INTO {wp_postmeta {1}} {POST_ID {1}} {meta_key {1}} {meta_value {1}}

正如你可以看到dupolicate键中的某些内容正在抛弃它。

2 个答案:

答案 0 :(得分:0)

您不应该使用wpdb对象插入执行此操作。查看文档:

$wpdb->insert( $table, $data, $format );

变量 $ format 必须是 Array String ,如果将SQL字符串连接到数组,则会导致意外行为。并且您不能将Array与带有点的String连接起来。

您应该使用带

的原始SQL查询
$wdpb->query('your query') 

甚至更好:

$wdpb->query($wdpb->prepare('your query')) 
如果值是用户输入,则

保护免受注入。

答案 1 :(得分:0)

我找到了扩展 wdpb 的好方法。这不是我写的,我不想因此而受到赞扬。我正在使用它来运行“ON DUPLICATE KEY UPDATE”。

https://wpreset.com/customize-wpdb-class/