通过这个查询,我更新了数据库中的图像字段:
$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
值(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/