[英]mysqli dynamic update query
通過此查詢,我更新了數據庫中的圖像字段:
$sql = $connection->prepare('UPDATE ads img1 = ?, img2 = ?, img3 = ? WHERE id = ?');
$sql->bind_param("ssss", $nameImg1, $nameImg2, $nameImg3, $id);
但是,如果用戶更新所有3張圖像,而不是僅更新一幅或兩幅圖像,此方法就可以正常工作。 如果用戶僅更改一張圖像,例如將img2
, img1
和img3
更改為空值,因為我使用了這種情況:
$img1 = $_POST["img-1-val"];
$img2 = $_POST["img-2-val"];
$img3 = $_POST["img-3-val"];
if($img1 != 'NULL'){
$nameImg1 = $date.'_'.$adsid.'_1';
}
if($img2 != 'NULL'){
$nameImg2 = $date.'_'.$adsid.'_2';
}
if($img3 != 'NULL'){
$nameImg3 = $date.'_'.$adsid.'_3';
}
在html
:
<input type="hidden" name="img-1-val" value="NULL"/>
<!-- this already has image -->
<input type="hidden" name="img-2-val"/>
<input type="hidden" name="img-3-val"/>
如果每個圖像都有圖像,則如果未設置圖像,則值為NULL
;如果用戶更改任何圖像,則將base64
值設置為NULL
。
但是主要的問題是,如果$_POST
返回NULL作為值,我不想更新數據庫中的任何img
字段,它已經更新了所有字段img1,img2,img3,這是刪除先前數據的原因。 如果值不等於NULL,如何更新數據庫字段?
考慮這些代碼在編輯頁面中運行。 另外我的問題是mysqli
查詢不if
條件。
您可以像這樣使更新查詢動態化:
/* function to build SQL UPDATE string */
function build_sql_update($table, $data, $where)
{
$cols = array();
foreach($data as $key=>$val) {
if($val != NULL) // check if value is not null then only add that colunm to array
{
$cols[] = "$key = '$val'";
}
}
$sql = "UPDATE $table SET " . implode(', ', $cols) . " WHERE $where";
return($sql);
}
這樣,只有那些具有有效值的列將被更新。
因此,您只需要使用查詢檢查不同的變量即可。
這將一張一張地檢查圖像,如果所有圖像都具有值,則它將更新所有三張圖像,否則將一張一張地更新。 這可能會有所幫助。
if((isset($img1)) && ($img1 != 'NULL')){
$nameImg1 = $date.'_'.$adsid.'_1';
$sql = $connection->prepare('UPDATE ads img1 = ? WHERE id = ?');
$sql->bind_param("ss", $nameImg1, $id);
}
if((isset($img2)) && ($img2 != 'NULL')){
$nameImg2 = $date.'_'.$adsid.'_2';
$sql = $connection->prepare('UPDATE ads img2 = ? WHERE id = ?');
$sql->bind_param("ss", $nameImg2, $id);
}
if((isset($img3)) && ($img3 != 'NULL')){
$nameImg3 = $date.'_'.$adsid.'_3';
$sql = $connection->prepare('UPDATE ads img3 = ? WHERE id = ?');
$sql->bind_param("ss", $nameImg3, $id);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.