mysqli动态更新查询

hujrc8aj  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(357)

通过此查询,我更新数据库中的图像字段:

$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 价值观。
但主要的问题是,我不想更新任何 img 数据库中的字段if $_POST 返回null作为值,它已经更新了所有字段,img1、img2、img3,这会导致删除以前的数据。如果值不等于null,如何更新数据库字段?
考虑这些代码在编辑页中运行。我的问题是 mysqli 查询not if 条件。

jgwigjjp

jgwigjjp1#

所以,您只需在查询中使用不同的变量进行检查。
这将逐个检查图像,如果所有图像都有值,则将逐个更新所有三个图像。这也许有帮助。

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);
}
xfyts7mz

xfyts7mz2#

您可以使更新查询动态化,如下所示:

/* 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);
}

这样,只有那些具有有效值的列才会被更新。

相关问题