Php 在两个单独的表中插入数据
我正在摆弄一些代码来打发时间,我不确定我是否用正确的方法来做这件事。如果可能的话,我将非常感谢您提出更好的方法 我接受了一个查询并添加了一个联合来进行基本相同的查询,但带有一个附加了文本的变量,如“IN” 下面你会看到我做了什么,我做了很多事情,但我担心我是在浪费时间,因为肯定有更好的方法来实现这一点Php 在两个单独的表中插入数据,php,mysql,Php,Mysql,我正在摆弄一些代码来打发时间,我不确定我是否用正确的方法来做这件事。如果可能的话,我将非常感谢您提出更好的方法 我接受了一个查询并添加了一个联合来进行基本相同的查询,但带有一个附加了文本的变量,如“IN” 下面你会看到我做了什么,我做了很多事情,但我担心我是在浪费时间,因为肯定有更好的方法来实现这一点 您必须执行两个单独的查询。将它们放入事务中,以确保它们以原子方式完成 您还应该使用准备好的语句来防止SQL注入 对于中的不需要变量,只需将其硬编码到SQL中即可 if(!empty($_POST[
您必须执行两个单独的查询。将它们放入事务中,以确保它们以原子方式完成
您还应该使用准备好的语句来防止SQL注入
对于
中的不需要变量,只需将其硬编码到SQL中即可
if(!empty($_POST['id']) && !empty($_POST['upc']) && !empty($_POST['category']) && !empty($_POST['state']) && !empty($_POST['quantity'])) {
$prod_stmt = $link->prepare("INSERT INTO products (id, upc, category, quantity, state)
VALUES (?, ?, ?, ?)");
$prod_stmt->bind_param("issi", $_POST['id'], $_POST['upc'], $_POST['category'], $_POST['quantity']);
$trans_stmt = $link->prepare("INSERT INTO transactions (id, upc, category, quantity, state)
VALUES (?, ?, ?, ?, 'IN')");
$trans_stmt->bind_param("issi", $_POST['id'], $_POST['upc'], $_POST['category'], $_POST['quantity']);
$link->begin_transaction();
$prod_stmt->execute();
$trans_stmt->execute();
$link->commit();
}
您也可以使用!空(变量)
而不是同时检查isset(变量)
和variable!=''代码>(注意,这种简化不适用于0
或null
为有效值的变量,因为这被认为是空的)。您必须执行两个单独的查询。将它们放入事务中,以确保它们以原子方式完成
您还应该使用准备好的语句来防止SQL注入
对于
中的不需要变量,只需将其硬编码到SQL中即可
if(!empty($_POST['id']) && !empty($_POST['upc']) && !empty($_POST['category']) && !empty($_POST['state']) && !empty($_POST['quantity'])) {
$prod_stmt = $link->prepare("INSERT INTO products (id, upc, category, quantity, state)
VALUES (?, ?, ?, ?)");
$prod_stmt->bind_param("issi", $_POST['id'], $_POST['upc'], $_POST['category'], $_POST['quantity']);
$trans_stmt = $link->prepare("INSERT INTO transactions (id, upc, category, quantity, state)
VALUES (?, ?, ?, ?, 'IN')");
$trans_stmt->bind_param("issi", $_POST['id'], $_POST['upc'], $_POST['category'], $_POST['quantity']);
$link->begin_transaction();
$prod_stmt->execute();
$trans_stmt->execute();
$link->commit();
}
您也可以使用!空(变量)
而不是同时检查isset(变量)
和variable!=''代码>(请注意,这种简化不适用于0
或null
为有效值的变量,因为这被视为空值)。您必须执行两个单独的查询。您只能使用UNION
组合SELECT
查询,而不能使用其他任何东西。您还应该学会使用准备好的语句和参数,而不是将变量连接到SQL中。使用die(mysqli_error($conn))是一个非常糟糕的主意
在您的代码中,因为它可能会泄漏敏感信息。有关更多说明,请参阅本文:警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。您应该创建两个单独的准备好的语句,然后一个接一个地执行它们。您必须执行两个单独的查询。您只能使用UNION
组合SELECT
查询,而不能使用其他任何东西。您还应该学会使用准备好的语句和参数,而不是将变量连接到SQL中。使用die(mysqli_error($conn))是一个非常糟糕的主意
在您的代码中,因为它可能会泄漏敏感信息。有关更多说明,请参阅本文:警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。你应该创建两个单独的准备好的语句,然后一个接一个地执行它们。非常感谢@Barmar,我试过了,但是没有成功,尽管没有出现错误。我添加了诸如值(“$id.”、“$upc.”、“$category.”、“$quantity.”)等值;
和值(“$id.”、“$upc.”、“$category.”、“$quantity.”、“$IN”)代码>除此之外,代码是完整的。知道为什么吗?这是我文件的截图。在代码中添加错误检查,请参见So i Addedmysqli_report(mysqli_report_error | mysqli_report_STRICT)代码>在我的mysqli连接之前,但我仍然没有收到任何错误。非常感谢@Barmar,我尝试了它,但它没有工作,尽管它没有给出错误。我添加了诸如值(“$id.”、“$upc.”、“$category.”、“$quantity.”)等值;
和值(“$id.”、“$upc.”、“$category.”、“$quantity.”、“$IN”)代码>除此之外,代码是完整的。知道为什么吗?这是我文件的截图。在代码中添加错误检查,请参见So i Addedmysqli_report(mysqli_report_error | mysqli_report_STRICT)代码>在我的mysqli连接之前,但我仍然没有得到任何错误。