使用此查询,我更新数据库中的图像字段:
$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
返回NULL作为值,我不想更新数据库中的任何$_POST
字段,它已经更新所有字段,img1,img2,img3,这个删除以前数据的原因。 如果值不等于NULL,如何更新数据库字段?
考虑在编辑页面中运行的这些代码。
另外我的问题是mysqli
查询不是if
条件。
答案 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);
}