php - 如果 4 个 mysql 查询中的任何一个失败,如何设置 mysqli 错误
问题描述
在我的数据库项目中,有一个表单,用户将在其中填写以向库存添加更多数据。我的数据库中有 4 个表。在提交表单的过程中,如果用户填写了一个已经存在的主键,则会有一个主键,mysqli_error()
它会声明用户输入了无效数据。但目前我的代码行有一个顺序(请忽略这些值不是英文的)
下面的行是将数据插入到我的第一个表中,如果出现错误,它将作为错误出现
$datastok = mysqli_query($connection,"INSERT into stok (Kod_Barang, Kod_Rak, Harga, Tarikh_Jual) VALUES ('$Kod_Barang','$Kod_Rak','$Harga','$Tarikh_Jual')")or die(mysqli_error());
下面的行是将数据插入到我的第二个表中,如果出现错误,它将作为错误出现
$databarang = mysqli_query($connection,"INSERT into barang (Kod_Barang, Nama_Barang, Bil_Barang) VALUES ('$Kod_Barang','$Nama_Barang','$Bil_Barang')")or die(mysqli_error());
下面的行是将数据插入到我的第三个表中,如果出现错误,它将作为错误出现
$datalokasi = mysqli_query($connection,"INSERT into lokasi (Kod_Rak, Jenis_Barang) VALUES ('$Kod_Rak', '$Jenis_Barang')")or die(mysqli_error());
下面的行是将数据插入到我的第四个表中,如果出现错误,它将作为错误出现
$datatarikh = mysqli_query($connection,"INSERT into tarikh (Nama_Barang, Tarikh_Beli) VALUES ('$Nama_Barang', '$Tarikh_Beli')")or die(mysqli_error());
我正在努力做到这一点,所以如果任何mysqli_query()
失败都不会插入。
现在发生的事情的例子:
$datastok
完美运行
$databarang
也完美运行
$datalokasi
有一个错误,mysqli_error()
将在此处停止并且$datatarikh
不会运行。
所以在这种情况下,我希望如果失败,一切$datastok $databarang $datatarikh
都不会执行。$datalokasi
解决方案
你可以使用 START TRANSACTION / COMMIT
首先从
mysqli_query($connection,"START TRANSACTION;");
然后在没有or die()的情况下运行所有查询
在所有查询运行后,检查其中一个是否有任何错误,
如果没有错误,则 COMMIT
mysqli_query($connection,"COMMIT;");
如果有错误,那么 ROLLBACK
mysqli_query($connection,"ROLLBACK;");
推荐阅读
- python - 简单的按钮点击连接到python函数
- java - 如何使用 BoolQueryBuilder 构建 multiMatchQuery
- python - 写入 Exasol DB 时如何处理标识/自动增量列?
- java - 如何将值模型类对象作为字符串传递给 ArrayList?
- javascript - 获取所有以@字符开头的单词
- php - 至少一个嵌套值大于零的 Elasticsearch 过滤器
- c# - 即使正确安装了软件 VS 2019 C#,所有控件(例如按钮、文本框)在其他 PC 上的显示方式也不是我想要的
- assembly - x86_64 程序集,系统调用写入的输出是否存储在某处?
- python-3.x - 尽管使用了默认参数,但 Get() 返回 None
- reactjs - 使用 TypeScript 输入带有强制变量的 GraphQL 查询