php - 更新表中的行值不起作用

标签 php mysql sql

如果数据存在,我正在尝试更新表的值。如果没有,创建一个新的。

代码连接到数据库,然后将表单数据通过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/

相关文章:

php - 从 MySQL 数据库中选择一个值,如果发布的值相等,则执行 'action'

java - 找不到类名 : com. mysql.jdbc.Driver 的驱动程序

php - 无法在 php mysql 中设置绑定(bind)参数

java - 关于如何制作与 SQL 数据库交互的 Java Web 应用程序的粗略概述?

sql - 如何使用SQL Server查找星期一到星期五的最后几周?

php - Codeigniter 类似通配符

php - 使用事务锁定表,在同一事务中删除然后插入

php - 如何编码和存储动态权限约束?

php - mysql_connect() : Headers and client library minor version mismatch Library:100005

php - Ajax更新、比较和插入数据到mysql