php - mysqli动态更新查询

标签 php mysql mysqli

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

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

但是如果用户更新所有 3 张图像,而不是仅仅更新一两张图像,这个方法就可以正常工作。如果用户只更改一张图像,例如更改 img2 , img1img3将更新为空值,因为我使用此条件:

$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值(value)。

但主要问题是,我不想更新任何 img数据库中的字段 if $_POST返回 NULL 作为值,它已经更新了所有字段,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);
}

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

关于php - mysqli动态更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940160/

相关文章:

mysql - MYSQL中如何通过相关表过滤具有多种特征的资源

mysql - Ruby on Rails 服务器无法连接到 mysql

php - 为什么带有 mysqli 的面向对象的 PHP 比过程方法更好?

php - 检测 PHP mysqli 中的空列值

php - 准备好并绑定(bind)参数时,带有 mysqli 的 Sum(?) 返回 0 或错误结果

php - 地理邻近搜索

javascript - 如果单击,则显示每个用户的表行

php:如何使用准备好的语句从sql数据库获取最新的日期时间?

javascript - 根据 $_GET 显示/隐藏 Div

php - MATCH (somefeald) AGAINST ('+".$_GET ['search' ] ."' 在 bool 模式下) 不起作用