php - 从一组变量发布到多个 PHP 数据库表
问题描述
我有一个来自 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();
}
?>
解决方案
对的,这是可能的。你可以做你现在正在做的事情,但是你需要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();
推荐阅读
- android - 如何为 Room 注入我的应用程序类
- php - 我想从这个 JSON URL 回显 IMDB ID、标题、质量和嵌入 URL
- c# - 如何在 C# 和 ASP.NET MVC 中从视图访问数据到模型
- python - 当数据框列中的值为 x 时,使用 Jupyter Notebooks 和 Python 计算另一个列值为 y 的次数?
- matlab - 如何在 MATLAB 中从国际标准大气模型绘制多个图形?
- unity3d - 在运行时创建可编写脚本的对象 - 它创建实例但不将它们保存在资产文件夹中?
- python - 使用数组的 Seaborn 小提琴图 - 错误:`x` 和 `y` 变量似乎都不是数字
- ios - 是否可以添加带有多行文本的左栏按钮项
- flutter - Flutter web 执行“热重启”而不是“热重载”。Flutter Web 是否支持“热重载”?
- android - 神经网络 API 与芯片组 NPU api