如果数据存在,我正在尝试更新表的值。如果没有,创建一个新的。
代码连接到数据库,然后将表单数据通过html的post方法发送。将数据存储在变量中后,设置我想要获取的搜索。
拜托,我不知道错误在哪里,我花了整整 3 天才知道这是什么问题。
这是我的代码:
<?php
session_start();
?>
<?php
$host_db = "host";
$user_db = "user";
$pass_db = "passwd";
$db_name = "database";
$tbl_name = "table";
$conexion = new mysqli($host_db, $user_db, $pass_db, $db_name);
if ($conexion->connect_error) {
die("conexion error: " . $conexion->connect_error);
}
$data1=$_POST['data1'];
$data2=$_POST['data2'];
$data3=$_POST['data3'];
$search = "SELECT * FROM $tbl_name
WHERE data1 = '$data1' ";
$result = $conexion->query($search);
$count = mysqli_num_rows($result);
$row = mysqli_fetch_row($result);
if ($count == 1) {
echo "exist";
$id=$row['ID'];
$query = "UPDATE $tbl_name
SET data1 ='$data1',
data2 ='$data2',
data3 = '$data3',
WHERE ID = '$id'";
if ($conexion->query($query) === TRUE) {
echo "updated data";
}else {
echo "error updating data";
}
}else{
echo "does not exist";
$query = "INSERT INTO $tbl_name (data1, data2, data3)
VALUES ('$data1', '$data2', '$data3')";
if ($conexion->query($query) === TRUE) {
echo "data saved";
}else {
echo "error saving data";
}
}
mysqli_close($conexion);
?>
最佳答案
你想要重复 key 更新
:
INSERT INTO $tbl_name (data1, data2, data3)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE data1 = values(data1), data2 = values(data2), data3 = values(data3);
为此,您需要在 data1
上有一个唯一索引或约束:
create unique index idx_t_data1 on $tbl_name(data1)
与您的方法相比,这具有多个优势。首先,唯一索引让数据库负责数据的完整性(data1
的唯一性)。数据库将为插入和更新执行此操作,无论它们在何处完成。
其次,您的代码存在计时问题,因此如果两个线程几乎同时尝试插入相同的值,它可能会失败。
第三,?
是参数的占位符。您不能参数化表名,但可以参数化值。这是一个好习惯 -- MySQL 可以缓存查询计划,以便查询运行得更快,它可以避免意外的语法错误,并使代码更不容易受到 SQL 注入(inject)攻击。
关于php - 更新表中的行值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48734171/