2012-09-14 173 views
0

我試圖設置一個if/else語句來檢查字段是否爲空,然後運行插入查詢,如果它不是空的,它將運行更新查詢。我知道這兩個查詢都是正確的,如果我分別運行他們將工作,但是當我把它們放在我的if/else語句中時,它只會執行更新查詢,當我在mysql中手動輸入一行時。基本上我可以運行更新查詢,但不能插入。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代碼(我使用的是智者,所以我必須將值設置爲硬件類型,我展示的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

我不確定你爲什麼要插入。如果一行中的特定列爲空或具有一些數據,則需要更新行並在該列中具有所需的值。 – heretolearn

+0

插入的目的是因爲我添加了一個新表,並且需要將其添加到我現有的硬件表中。行還沒有插入到這個新表中,所以我創建了一些測試行,我可以用我的查詢更新這些行。 – bubbles

回答

0

如果有數據庫中沒有行的更新將失敗...

回到ON重複鍵。這是你的追求。

+0

SQL = 「INSERT INTO fetss.ocs_extended(ocsID,hwTYPE) \t \t \t \t \t \t \t \t \t \t \t VALUES('」。(INT)$ _ POST [ 'ID']。 「 ''」。$ DB- > quote($ _ REQUEST ['changeTypeID'])。'') \t \t \t \t \t \t \t \t \t \t \t ON DUPLICATE KEY UPDATE hwTYPE ='「。$ db-> quote($ _ REQUEST ['changeTypeID'])。」'「; – bubbles

+0

我們可以跳過代碼並只檢查底層的SQL嗎? –

+0

當然,我認爲這是它看起來如果它的簡化:INSERT INTO表(id,type)VALUES(id,type)重複鍵更新type =「type」; – bubbles

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']是否已設置,但從未在你顯示的代碼中使用它 - 這是打算嗎?