0

我正在尝试设置一个 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'])."'";
4

2 回答 2

0

如果数据库中没有行,更新将失败...

返回到 ON DUPLICATE KEY。这就是你所追求的。

于 2012-09-14T16:47:21.983 回答
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']已设置但从未在您显示的代码中使用它 - 这是有意的吗?

于 2012-09-14T17:04:39.857 回答