我正在尝试使用下面的查询在我的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键中的某些内容正在抛弃它。
答案 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”。