這個問題在這里已經有了答案: mysqli 準備好的陳述句 - 不要更新 NULL 值 4 個答案 通過準備好的陳述句更新 sql 中的行的一部分 1 個答案 昨天關門。
是否可以進行 UPDATE 查詢,但實際上不能更新值并將其置之不理?
我想有這樣的查詢:
UPDATE homes SET age = 25, SET name = (don’t update) WHERE id = 1.
當然,我可以省略“SET name =”,但我將其用作 PHP 中準備好的陳述句的一部分。首先準備好查詢,然后發送與其匹配的查詢。但我經常不想設定值,但不想開始另一個準備好的查詢。這是我的用例示例
$figures = [ ['age' => 'foo1', 'name' => 'DO NOT UPDATE'], ['age' => 'foo1', 'name' => 'bar1'], ['age' => 'foo2', 'name' => 'bar2']];
$stmt = $pdo->prepare("UPDATE homes SET age = ?, name = ?");
foreach ($figures as $row) {
$stmt->execute([$row['age'], $row['name']]);
}
可以更改查詢和資料值。我想使用單個 UPDATE 準備陳述句,而不是使用不同的 prepare() 來執行 100 條不同的準備陳述句。
uj5u.com熱心網友回復:
如果每列的特定值永遠不會出現在資料中,則可以檢查這些值。例如,如果 name 永遠不能是DO NOT UPDATE,那么你準備好的陳述句是:
UPDATE homes SET ..., name = if(?='DO NOT UPDATE',name,?) WHERE id=?
并傳遞 name 的值(可能是DO NOT UPDATE)執行兩次:
$stmt2->execute([..., $row['name'], $row['name'], $row['id']]);
uj5u.com熱心網友回復:
我相信你不想單獨處理 $figures 陣列,所以你想在一個回圈中完成它。
所以只需添加第二條 sql 準備陳述句(你不介意,對嗎?),然后使用 if-then-else 來確定要執行哪個準備陳述句
<?php
$figures = [ ['age' => 'foo1', 'name' => 'DO NOT UPDATE', 'id' => '1'], ['age' => 'foo1', 'name' => 'bar1', 'id' => '2'], ['age' => 'foo2', 'name' => 'bar2', 'id' => '3']];
$stmt = $pdo->prepare("UPDATE homes SET age = ?, name = ? where id=?");
$stmt2 = $pdo->prepare("UPDATE homes SET age = ? where id=?");
foreach ($figures as $row) {
if ($row['name']!='DO NOT UPDATE'){
$stmt->execute([$row['age'], $row['name'], $row['id']]);
} else {
$stmt2->execute([$row['age'], $row['id']]);
}
}
?>
請修改準備好的陳述以滿足您的實際需求
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533159.html
