我有一个包含大量行的表,我需要更新具有特定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);
?>
将测试放入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()
测试会将列的旧值重新分配给它。
尝试使用此SQL查询:
UPDATE table_name SET Address='UK' WHERE ID=1
当然,您可以用ID=1来代替任何其他号码。