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

REPLACEおそらく、MySQL の構文を利用できます。

$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 に答える