[英]PDO with bound parameters sql query If statement in update
我試圖創建一個非sql形式的“觸發器”,但是當狀態字段設置為100時,我想更新date_added字段
$sql='UPDATE table
SET status=:status,
date_added=[PSEUDO CODE :status=100 ? now() : null;]
WHERE id=:id';
$stmt=$conn->prepare($sql);
$stmt->bindParam(':id', $id, PDO::PARAM_STR);
$stmt->bindParam(':status', $status, PDO::PARAM_STR);
$stmt->bindParam(':sign_id', $sign_id, PDO::PARAM_STR);
$stmt->execute();
預先感謝您的任何幫助
date_added = :date
$date = $status == 100 ? date('Y-m-d H:i:s') : null;
$stmt->bindParam(":date", $date);
您也可以使用IF
在MySQL中進行此比較。 我不認為一個比另一個特別快,但是使用PHP進行比較對我來說更有意義。
這應該工作:
$sql='UPDATE table
SET status=:status,
date_added=IF(:status=100, NOW(), NULL)
WHERE id=:id';
$stmt=$conn->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':status', $status);
$stmt->execute();
但是,只有在將PDO配置為使用模擬准備的情況下,才在一個語句中兩次使用相同的參數名稱。 如果您使用本機准備,則即使對於相同的值,也應使用不同的參數名稱:
$sql='UPDATE table
SET status=:status,
date_added=IF(:status_again=100, NOW(), NULL)
WHERE id=:id';
$stmt=$conn->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':status', $status);
$stmt->bindParam(':status_again', $status);
$stmt->execute();
否則使用位置參數會更簡單。 如果僅將值數組傳遞給execute(),則也可以跳過bindParam()。 后面的兩個更改一起有一個示例:
$sql='UPDATE table
SET status=?,
date_added=IF(?=100, NOW(), NULL)
WHERE id=?';
$stmt=$conn->prepare($sql);
$stmt->execute([$status, $status, $id]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.