在关系mysql数据库的多个表中执行多个插入查询的正确方法是什么?

SAAN07

我有一个场景,我将如何确保所有插入查询都正常工作。我使用 PHP 作为后端编码,使用 mysql 作为我的数据库。下面我简要描述我的问题。

我有两张桌子。一张表用于 login_details,另一张表用于 Personal_details。我的表结构在这里。

表 login_details 此处 user_id 是唯一主键,sl_num 是自动增量:

th{
  padding: 3px;
  border: 1px solid black;
}

td{
  padding: 3px;
  border: 1px solid black;
}
<table>
   <thead>
      <th>sl_num</th>
      <th>user_id</th>
      <th>email</th>
      <th>password</th>
   </thead>
   <tbody>
      <tr>
        <td>1</td>
        <td>123</td>
        <td>[email protected]</td>
        <td>5567</td>
      </tr>
      <tr>
        <td>2</td>
        <td>246</td>
        <td>[email protected]</td>
        <td>9908</td>
      </tr>
   </tbody>
</table>
    

我的第二个表是personal_details。这里 user_id 也是主键,这个键也维护两个表之间的关系,sl_num 是自动增量的:

th{
  padding: 3px;
  border: 1px solid black;
}

td{
  padding: 3px;
  border: 1px solid black;
}
<table>
   <thead>
      <th>sl_num</th>
      <th>user_id</th>
      <th>name</th>
      <th>address</th>
      <th>age</th>
   </thead>
   <tbody>
      <tr>
        <td>1</td>
        <td>123</td>
        <td>Daniel</td>
        <td>San Francisco</td>
        <td>23</td>
      </tr>
      <tr>
        <td>2</td>
        <td>246</td>
        <td>Lucy</td>
        <td>London</td>
        <td>27</td>
      </tr>
   </tbody>
</table>

而且,我使用此代码在这些表中插入值。

<?php
   $user_id = uniqid();
   $email = $_POST['email'];
   $password = $_POST['password'];
   $name = $_POST['name'];
   $address = $_POST['address'];
   $age = $_POST['age'];

   $con = mysqli_connect('localhost', 'username', 'password', 
                         'user_db');

   $query = "INSERT INTO `login_details` (`user_id`, `email`, 
             `password`) VALUES ('$user_id', '$email', '$password')";
   mysqli_query($con,$query);

   $query2 = "INSERT INTO `personal_details` (`user_id`, `name`, 
             `address`, `age`) VALUES ('$user_id', '$name', '$address', 
             '$age')";
   mysqli_query($con,$query);

   echo 'User created successfully';?>

但是曾经发生过一次有线问题。第三个用户名“John Doe”试图创建他的帐户。Personal_details 表的详细信息插入成功,但由于某些原因没有插入 login_details 的详细信息。因此,用户“John Doe”在桌子上有个人信息,但由于他没有任何登录信息,因此无法登录。

那么,这种多插入情况的最佳解决方案是什么。我怎样才能防止这种情况。这意味着,如果将一行插入到 login_details 中,那么系统必须确保相关行也插入到personal_details 表中。如果两个插入成功,那么事务发生了,或者如果插入了一行而另一行没有插入,那么系统将自动丢弃插入的行并显示失败消息。

马茨林德

查询失败的原因可能是因为您没有转义 SQL 上下文中的任何变量。这意味着如果其中一个'字符串中存在某个位置,则 SQL 语句将变为无效。称为 SQL 注入攻击,可以迅速使您的应用程序容易受到攻击。

减轻这些攻击的常用方法是改用准备好的语句

如果第一个查询失败,那至少可以让您取消第二个查询。但是如果第二个失败了怎么办(由于某种原因,当您使用了正确的 ..如果您正确地转义了变量,但磁盘可以满载等情况下,实际上不会发生)。

您可以将这两个语句包装在一个 SQL 事务中,然后在任何查询失败时提交或回滚该事务。这假设您在 MySQL 中的表/数据库类型支持事务并且禁用了自动提交。

您可以通过调用 mysqli 启动事务mysqli_begin_transaction($con)

然后,您可以通过调用mysqli_commit来提交或回滚事务mysqli_rollback

要检测上一条语句是否失败,您可以调用mysqli_error.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将数据插入数据库的正确方法是什么?

在Laravel 5.2中使用多个MySQL数据库连接查询关系存在

在Django中建立具有深层依赖关系的数据库的正确方法是什么?

编写 SQLite 数据库查询以获取用户并传递用户表的正确方法是什么

从表单插入数据库中的多个表

如何在codeigniter中查询(获取)mysql数据库的多个表作为单个表

更新或插入多个记录(如果不存在于mysql数据库的表中)

将大型csv导入规范化的关系数据库(具有多个表)的最佳实践是什么

将API中的多个值插入mysql数据库

SQLite数据库查询多个表

在数据库中插入多个记录的最佳方法

MySQL查询多个数据库

从mysql数据库多个表中获取最新记录

在MYSQL数据库中存储和查询hastags的最有效方法是什么

将数据从多个表/一个数据库传递到视图的最佳方法是什么?

在 MySQL Connector C++ API 中使用一个函数调用执行多个查询的正确方法是什么?

将由多个产品组成的订单插入SQL数据库的最佳实践是什么?

使用AsyncTask将数据插入数据库的正确方法是什么

跨多个关系的 Django 数据库查询

具有多个关系的laravel数据库查询

从输入中获取datetime-local值并将其插入数据库的正确方法是什么?

在mySQL中使用PDO/PHP将数据插入到预设的数据库和表中的正确方法

使用Redis缓存关系数据库查询结果的典型方法是什么?

在插入mysql数据库时获取最后插入ID的最可靠方法是什么

SQL查询问题:并非从mysql数据库中的多个表中检索到所有记录

在MySQL上进行全文搜索:在一个数据库表中按多个单词执行搜索

执行多个数据库查询(承诺)顺序

CompletableFuture以异步执行多个数据库查询

在多个数据库上执行SQL查询