[英]php pdo update only changes value in array
我是pdo的新手,所以我只需要更改的值或從html作為數組(Items [])發布的值,下面的代碼更新發布的值並將未更改的值變為零。 請幫助並謝謝。
<?php
if(isset($_POST['update'])) {
for($t=0;$t<8;$t++){
if(isset($_POST['Items'])) {
$items=$_POST['Items'];
$update="UPDATE items SET Updater = :LogName,
UptoDate = :uptodate,
ItemPrice = :Items
WHERE id = $t";
$y=$t-1;
$stmt=$Link->prepare($update);
$stmt->bindParam(':Items',$items[$y], PDO::PARAM_STR);
$stmt->bindParam(':uptodate', $date, PDO::PARAM_STR);
$stmt->bindParam(':LogName', $LogName, PDO::PARAM_STR);
$stmt->execute();
} else {
// Don't do anything because it means there is no $_POST['Items(t)']
}
}
}
?>
......
</tr>
</table>
<input type="submit" name="update" value="تحديث"/>
</form>
將數據庫中的當前數據加載到一個數組中(正確格式化),然后使用array_diff
獲取數據庫與表單數據之間的差異,因此您可以根據需要構建UPDATE
語句。
您還可以為未填寫的字段指定默認值,因此當它們到達服務器時,您會知道哪些字段已更改(那些字段的值與默認值不同)。
尤里卡阿。 我解決了:
if(isset($_POST['update'])) {
$Items=$_POST['Items'];
for($t=0;$t<8;$t++){
if((!isset($Items[$t])) or ($Items[$t]==="") or ($Items[$t]===0))
{$t++;}
elseif(isset ($Items[$t])){
$y=$t+1;
$update="UPDATE items SET Updater = :LogName,
UptoDate = :uptodate,
ItemPrice = :Items
WHERE id = $y";
$stmt=$Link->prepare($update);
$stmt->bindParam(':Items',$Items[$t], PDO::PARAM_STR);
$stmt->bindParam(':uptodate', $date, PDO::PARAM_STR);
$stmt->bindParam(':LogName', $LogName, PDO::PARAM_STR);
$stmt->execute();
}}}
更新查詢將僅更新需要更改的行。 您可以獲取受影響的行( http://php.net/manual/en/pdostatement.rowcount.php ),該行將告訴您已更新了多少行。 除非您特別需要更改的值(在這種情況下,您需要首先選擇它們),否則我相信代碼將自動處理您需要的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.