mysqli动态更新查询

时间:2018-04-20 11:00:35

标签: php mysql mysqli

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

$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值。

但主要问题是,如果img返回NULL作为值,我不想更新数据库中的任何$_POST字段,它已经更新所有字段,img1,img2,img3,这个删除以前数据的原因。 如果值不等于NULL,如何更新数据库字段?

考虑在编辑页面中运行的这些代码。 另外我的问题是mysqli查询不是if条件。

2 个答案:

答案 0 :(得分:3)

您可以像这样动态更新查询:

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

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

答案 1 :(得分:1)

因此,您必须使用查询检查不同的变量。

这将逐个检查图像,如果所有图像都有值,那么它将逐个更新所有三个图像。 这可能会有所帮助。

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