簡體   English   中英

mysqli動態更新查詢

[英]mysqli dynamic update query

通過此查詢,我更新了數據庫中的圖像字段:

$sql = $connection->prepare('UPDATE ads img1 = ?, img2 = ?, img3 = ? WHERE id = ?');
$sql->bind_param("ssss", $nameImg1, $nameImg2, $nameImg3, $id);

但是,如果用戶更新所有3張圖像,而不是僅更新一幅或兩幅圖像,此方法就可以正常工作。 如果用戶僅更改一張圖像,例如將img2img1img3更改為空值,因為我使用了這種情況:

$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.

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