如果数据存在,我正在尝试更新表的值。如果没有,请创建一个新的。
代码连接到数据库,然后通过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);
?>
答案 0 :(得分:0)
您想要on duplicate key update
:
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注入攻击。