我試圖創建多個條件的INSERT語句作爲PHP函數的一部分 - 這是我到目前爲止的代碼:MYSQL有條件的插入與多個條件
public function insertData($data)
{
try
{
$stmt = $this->con->prepare('
INSERT IGNORE INTO tblProductData(
strProductCode,
strProductName,
strProductDesc,
smintStockLevel,
dblPrice,
dtmDiscontinued,
dtmAdded)
SELECT :strProductCode,
:strProductName,
:strProductDesc,
:smintStockLevel,
:dblPrice,
(CASE WHEN :dtmDiscontinued = "yes" then NOW();
ELSE SET dtmlDiscontinued = "NULL";
END CASE),
NOW()
FROM dual
WHERE not (:dblPrice < 5.0 and :smintStockLevel < 10)
and not (:dblPrice > 1000.0) ');
$length = count($data);
for ($x=0; $x < $length; $x++) {
$params = array(':strProductCode' => $data[$x][0],
':strProductName' => $data[$x][1],
':strProductDesc' => $data[$x][2],
':smintStockLevel' => $data[$x][3],
':dblPrice' => $data[$x][4]);
$stmt->execute($params);
}
return $stmt;
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
}
的條件如下
- 如果
dblPrice
的值小於5,並且smintStockLevel的值小於10,則不會插入該行。 - 如果
dblPrice
值大於1000 - 不要插入該行 - 其中dtmDiscontinued =「是」的NOW()函數將被調用插入單元格中的當前日期/時間。否則,請輸入
NULL
此查詢正在作爲PHP準備語句的一部分執行,它正在遍歷包含所有值的多維數組。
我需要創建多個CASE
(s)嗎?有人可以提供建議,以解決這個問題的最佳途徑。
需要更多信息,請告訴我。
UPDATE
上面的代碼已被輸入到顯示完整的背景,其中包括戈登的建議。但是,我正在執行時收到錯誤ERROR: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
。
有人可以看到原因嗎?由於
所需的解決方案
:dtmlDiscontinued
添加到$params
解決錯誤:
例
$params = array(':strProductCode' => $data[$x][0], ':strProductName' => $data[$x][1], ':strProductDesc' => $data[$x][2],
':smintStockLevel' => $data[$x][3], ':dblPrice' => $data[$x][4], ':dtmDiscontinued' => $data[$x][5]);
檢查的條件。 – 2014-10-04 18:51:44