我正试图使用下面的查询将一行插入到我的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/