【问题标题】:From one set of variables post to multiple Php database tables从一组变量发布到多个 PHP 数据库表
【发布时间】:2020-10-12 17:57:00
【问题描述】:

我有一个来自 HTML 表单的变量,这些变量当前被发布到我的数据库表中的一个表中。

我想在同一个函数中同时将这些相同的变量发布到其他表中。这可能吗?这是我当前成功发布到一个表的 PHP 函数

<?php
    $var1 = $_POST['var1'];
    $var2 = $_POST['var2'];
    $var3 = $_POST['var3'];


    // Database connection
    $conn = new mysqli('localhost','user','password','database');
    if($conn->connect_error){
        echo "$conn->connect_error";
        die("Connection Failed : ". $conn->connect_error);
    } else {
        $stmt = $conn->prepare("insert into table1(var1, var2, var3) values(?, ?, ?)");
        $stmt->bind_param("sss", $var1, $var2, $var3);   
        $execval = $stmt->execute();
        echo $execval;
        $stmt->close();
        $conn->close();
    }
?>

并且我希望将以下变量发布到同一个数据库中的多个表中,所以想了以下但它不起作用 -

<?php
    $var1 = $_POST['var1'];
    $var2 = $_POST['var2'];
    $var3 = $_POST['var3'];


    // Database connection
    $conn = new mysqli('localhost','user','password','database');
    if($conn->connect_error){
        echo "$conn->connect_error";
        die("Connection Failed : ". $conn->connect_error);
    } else {
        $stmt = $conn->prepare("insert into table1(var1, var2, var3) values(?, ?, ?)");
        $stmt->bind_param("sss", $var1, $var2, $var3);
        $stmt = $conn->prepare("insert into table2(var1) values(?)");
        $stmt->bind_param("s", $var1);
        $stmt = $conn->prepare("insert into table3(var2, var3) values(?, ?)");
        $stmt->bind_param("ss", $var2, $var3); 
        $execval = $stmt->execute();
        echo $execval;
        $stmt->close();
        $conn->close();
    }
?>

【问题讨论】:

  • 不幸的是,这样编码时它不会发布到任何表,存在连接错误
  • 尝试调用 $stmt->execute();每次调用 $stmt->bind_param
  • 谢谢穆斯塔法,太简单了哈哈!
  • phpMyAdmin 是用 PHP 编写的 MySQL 管理工具,它本身不是数据库。您可能正在使用 MySQL 或 MariaDB 作为数据库。

标签: php sql forms mysqli


【解决方案1】:

是的,这是可能的。你可以做你现在正在做的事情,但是你需要在准备好每个查询之后调用execute() 方法。除此之外,将其包装在事务中也是一个好主意。事务可帮助您确保所有操作或无操作都成功。如果其中一个失败,则不会执行其他的。

您的固定代码应如下所示:

<?php
$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
$var3 = $_POST['var3'];


// Database connection
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // switches error reporting on
$conn = new mysqli('localhost','user','password','database');
$conn->set_charset('utf8mb4'); // always set the charset

// Start transaction
$conn->begin_transaction();

$stmt = $conn->prepare("insert into table1(var1, var2, var3) values(?, ?, ?)");
$stmt->bind_param("sss", $var1, $var2, $var3);
$stmt->execute();

$stmt = $conn->prepare("insert into table2(var1) values(?)");
$stmt->bind_param("s", $var1);
$stmt->execute();

$stmt = $conn->prepare("insert into table3(var2, var3) values(?, ?)");
$stmt->bind_param("ss", $var2, $var3); 
$stmt->execute();

// End transaction
$conn->commit();

【讨论】:

    【解决方案2】:

    尝试调用 $stmt->execute();每次调用 $stmt->bind_param();

    看看这个在同一个调用中执行多个查询的已解决问题。 PDO support for multiple queries (PDO_MYSQL, PDO_MYSQLND)

    【讨论】:

      猜你喜欢
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多