我正在尝试设置if / else语句,该语句将检查字段是否为空,然后运行插入查询,如果它不为空,则会运行更新查询。我知道两个查询都是正确的,如果我单独运行它们会工作,但是当我把它们放在我的if / else语句中时,它只会在我手动输入mysql中的一行时执行更新查询。基本上我可以运行更新查询但不能运行插入。
if(!empty($_REQUEST['htype'])){
$sql = "INSERT INTO fetss.ocs_extended(ocsID, hwTYPE)
VALUES('" .(int)$_POST['id'] ."', '". $db->quote($_REQUEST['changeTypeID']) ."')";
} else
{
$sql = "UPDATE fetss.ocs_extended SET hwTYPE = '".$db->quote($_REQUEST['changeTypeID'])."' WHERE ocsID IN (".join(",",$checkedHW).")";
}
$db->query($sql);
html代码(我使用smarty所以我将值设置为硬件类型,我在td标签中显示值:
<td><input type="hidden" name="htype" value="{$systems[s].hwtype}">{$systems[s].hwtype} </td>
我也尝试过使用INSERT INTO ON DUPLICATE等,但它没有用,所以我想我会尝试一个简单的if / else语句
非常感谢任何帮助:)
编辑这是我的重复密钥查询:
$sql = "INSERT INTO fetss.ocs_extended(ocsID, hwTYPE)
VALUES('" .(int)$_POST['id'] ."', '". $db->quote($_REQUEST['changeTypeID']) ."')
ON DUPLICATE KEY UPDATE hwTYPE = '".$db->quote($_REQUEST['changeTypeID'])."'";
答案 0 :(得分:0)
如果数据库中没有行,则更新将失败...
返回ON DUPLICATE KEY。这就是你所追求的。
答案 1 :(得分:0)
也许您可以使用MySQL的REPLACE
语法:
$sql = "REPLACE INTO fetss.ocs_extended (ocsID, hwTYPE) VALUES ('" .(int)$_POST['id'] ."', '". $db->quote($_REQUEST['changeTypeID']) ."')";
它就像INSERT INTO
语句一样工作,但是,如果主键存在,你正在“替换为”,它将删除现有的并插入新的。这可以为您节省if / else语句,并在一个语句中处理它。
如果设置$checkedHW
,我不确定$_REQUEST['htype']
变量中的内容,因此这可能适合您的需求,也可能不适合您。说到这一点,你检查是否设置了$_REQUEST['htype']
但是从未在你显示的代码中使用它 - 这是打算用的吗?