簡體   English   中英

具有綁定參數的PDO SQL查詢If語句在更新中

[英]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();
  1. 在發出查詢之前,最好在sql查詢中( 不確定如何執行此操作 )或在php頁面上嘗試此操作( 認為我可能會碰到那個問題 )?
  2. 一種或另一種方式會提高性能嗎?

預先感謝您的任何幫助

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM