仅更新具有非空值的MYSQL行

时间:2015-02-13 20:05:55

标签: php mysql database

我有一个包含大量行的表,我需要更新具有特定ID的行,例如假设我有一行包含以下详细信息:

Id= 1
Name= lessa
Address = USA

现在我使用下面的PHP代码来更新行:

<?php
$con = mysqli_connect("localhost","MyUserName","MyPassword","DB");
$id = '1';
$name = "";
$address = "UK";
// update only non value items
$r=mysqli_query($sql);
mysqli_close($con);
?>

现在我的问题是因为地址的值从美国更改为英国我只需更新此值,因为名称值不是名称应该保留所以更新后行应如下所示:

ID=1
Name = lessa
Address = UK

另外如果在另一个时间名称值发生变化且地址保持不变,我只需要更新名称。

也假设我有100列,不仅仅是三个例子。

任何有关编写更新声明的帮助都将不胜感激。

更新

我使用下面的代码,但没有更新:

<?php
$con = mysqli_connect(DB info);
$id = 'jo_12';
$name = "";
$address = "UK";
$sql = "UPDATE info
        SET name = IF(? = '', name, ?),
            address = IF(? = '', address, ?)
        WHERE id = ?";
$stmt = $con->prepare($sql);
$stmt->bind_param("ssssi", $name, $name, $address, $address, $id);
$stmt->execute();

mysqli_close($con);
?>

2 个答案:

答案 0 :(得分:4)

将测试放入UPDATE查询:

$sql = "UPDATE yourTable
        SET name = IF(? = '', name, ?),
            address = IF(? = '', address, ?)
        WHERE id = ?";
$stmt = $con->prepare($sql) or die ($con->error);
$stmt->bind_param("sssss", $name, $name, $address, $address, $id);
$stmt->execute();

如果变量为空,IF()测试会将列的旧值分配给它。

答案 1 :(得分:0)

尝试使用此SQL查询:

UPDATE table_name SET Address='UK' WHERE ID=1

您当然可以将ID = 1替换为任何其他数字。