wpdb查询使用重复密钥检查更新/插入


wpdb query using duplicate key to check update/insert

我正试图使用下面的查询将一行插入到我的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 ( post_id ,元密钥,元值) VALUES (Array ON DUPLCIATE KEY UPDATE meta_value = changed ,Array ON DUPLCIATE KEY UPDATE meta_value = changed ,Array ON DUPLCIATE KEY UPDATE meta_value = changed )"

正如你所看到的,dupolicate密钥中有一些东西正在抛出这个问题。

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

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

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

您应该使用带有的原始SQL查询

$wdpb->query('your query') 

甚至更好:

$wdpb->query($wdpb->prepare('your query')) 

如果值是用户输入,则保护其不被注入。

我找到了一个扩展wdpb的好方法。我没有写这篇文章,也不想因此而受到赞扬。我正在用它来运行"ON DUPLICATE KEY UPDATE"。

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