php - 如何一次性使用SQL在SQL中运行多个插入查询?

标签 php mysql mysqli

我想运行mysql查询以从自定义html表单插入数据。
在这里,我必须插入多组数据,一些数据插入一个表,另一些插入另一个表。目前,我正在使用简单的方法,使用jquery ajax将数据发送到php页面,并一个接一个地运行多个mysqli_query()函数。但是我想当会有大量用户时,就会出现与速度有关的问题。所以有人可以建议我做一个更好的方法来做同样的事情。

数据库中有5个表,每个表都有7至10列,每次需要获取不同的数据集。

我只想在上一个插入查询成功完成后才运行每个查询。
这就是为什么我每次都要检查结果,然后运行下一个查询的原因,这使我感到庞大的用户群存在速度问题。

最佳答案

The problem is, I need to insert data to first table and if its successfully inserted then only run query for the second table.



这意味着您需要一个transaction

事务是一组查询,它们要么全部执行成功,要么全部失败。这是为了确保您不会在表中得到废话数据。

不要
  • 不要使用多查询。
  • 不要使用mysql_*函数。
  • 不要使用批量插入。

  • 人们告诉您要这样做,完全不知道他们在做什么,请忽略它们。


  • 使用PDO
  • 使用prepared statements
  • 一次准备语句,多次使用

  • 示例代码-请勿复制粘贴
    $dsn = 'mysql:dbname=testdb;host=127.0.0.1;charset=utf8mb4';
    $user = 'dbuser';
    $password = 'dbpass';
    
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $insert['first'] = $pdo->prepare("INSERT INTO table SET col1 = :val, col2 = :val2");
    $insert['second'] = $pdo->prepare("INSERT INTO another_table SET col1 = :val, col2 = :val2"); 
    
    $pdo->beginTransaction();
    
    $insert['first']->bindValue(':val', 'your value');
    $insert['first']->bindValue(':val2', 'anothervalue');
    $insert['first']->execute();
    
    $insert['second']->bindValue(':val', 'your value');
    $insert['second']->bindValue(':val2', 'anothervalue');
    $insert['second']->execute();
    
    $pdo->commit();
    

    上面的代码仅在两次插入均成功的情况下才将数据保存在两个表中。

    关于php - 如何一次性使用SQL在SQL中运行多个插入查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64368470/

    相关文章:

    php - post 形式的数据顺序是否与 web 形式的数据顺序相同?

    javascript - 数据表: brake with url

    php - 语法错误,意外的T_STRING,期望 ']'

    php - 命令不同步;你现在不能运行这个命令

    php - 如何在采购订单表单中插入多个 `product` 和多个其他变量

    PHP:基于 JWT 的身份验证

    php - 将 MySQL 日期转换为 PostgreSQL 日期

    php - 我如何在 implode 函数中打印字符串

    php - 如何使用 Ajax 在 PHP 中从数据库中获取数据

    php - fatal error 导致没有结果出现(Mysqli)