MySQL检查字段是否为空,然后运行查询

时间:2012-09-14 16:32:53

标签: mysql

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

2 个答案:

答案 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']但是从未在你显示的代码中使用它 - 这是打算用的吗?