首先,您正在使用prepare 不正确。你好像有$wpdb->update\'s参数包装在$wpdb->prepare 就像那样。那行不通。实际上,您正在通过update 单个参数--的输出prepare. 尝试以下简单方法,您就会明白为什么这样做行不通:
$post_id = 123;
$item_stock = 567;
var_dump(
$wpdb->prepare(
$wpdb->prefix.\'item_info\',
array(
\'post_id\' => $post_id,
\'item_stock\' => $item_stock
),
array(\'post_id\' => $post_id)
)
);
And $wpdb->update() runs prepare for you.
其次,如果这是我,我会跳过helper函数膨胀并编写一个适当的ON DUPLICATE KEY UPDATE 查询:
$sql = "INSERT INTO {$wpdb->prefix}item_info (post_id,item_stock) VALUES (%d,%s) ON DUPLICATE KEY UPDATE item_stock = %s";
// var_dump($sql); // debug
$sql = $wpdb->prepare($sql,$post_id,$item_stock,$item_stock);
// var_dump($sql); // debug
$wpdb->query($sql);
这假设
post_id 是一个
UNIQUE index or PRIMARY KEY. 如果您的表结构是我认为的那样,那么让数据库来处理它。