我要么在表中更新或插入数据,要么取决于它是否存在。更新工作正常,但插入只有一半工作。
我explode
输入名称有助于组织数据,所以它看起来像这样:
name="relation,type,state"
这会产生:
// relation is what I use to identify the relationship between text and url
// type will either be 'text' or 'url'
// state is a two character abbreviation ex: 'ca'
$key = array('relation','type','state');
然后我在字段上使用foreach并使用insert:
if($key[1] === 'text'){
$wpdb->insert(
'areas_module_text',
array(
'text' => $value,
'state' => $key[2],
'relation' => $key[0]
));
}else if($key[1] === 'url'){
$wpdb->insert(
'areas_module_urls',
array(
'url' => $value,
'state' => $key[2],
'relation' => $key[0]
));
}
第一个if
正在运行,但第二个似乎只是因某些原因而被绕过。除了WHERE之外,代码块几乎与更新完全相同,两者都可以正常工作。这只是INSERT的第二部分。那是为什么?
这是在表单提交时执行的完整脚本:
foreach($_POST as $key => $value){
if($key != 'update-areas-module-submit' && $value != ''){
$key = explode(',', $key);
$textExists = $wpdb->get_results("SELECT * FROM areas_module_text WHERE relation = '".$key[0]."' AND state = '".$key[2]."'");
$urlExists = $wpdb->get_results("SELECT * FROM areas_module_urls WHERE relation = '".$key[0]."' AND state = '".$key[2]."'");
if($textExists || $urlExists){
if($key[1] === 'text'){
$wpdb->update(
'areas_module_text',
array(
'text' => $value,
), array('relation' => $key[0], 'state' => $key[2]));
}else if($key[1] === 'url'){
$wpdb->update(
'areas_module_urls',
array(
'url' => $value,
), array('relation' => $key[0], 'state' => $key[2]));
}
}else{
if($key[1] === 'text'){
$wpdb->insert(
'areas_module_text',
array(
'text' => $value,
'state' => $key[2],
'relation' => $key[0]
));
}else if($key[1] === 'url'){
$wpdb->insert(
'areas_module_urls',
array(
'url' => $value,
'state' => $key[2],
'relation' => $key[0]
));
}
}
}
}
echo '<div class="updated"><p>Updated successfully!</p></div>';
}
我换了2 inserts
而url
仍然没有用。我删除了检查以查看条目是否存在以及updates
部分是否有效,但我显然不能这样做,因为它每次都会继续插入新行。我还为每个输入转储了$key
的数据,数据显示正常,所以我不明白为什么它不起作用。
希望有人能解释为什么会这样。