Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在两个单独的表中插入数据_Php_Mysql - Fatal编程技术网

Php 在两个单独的表中插入数据

Php 在两个单独的表中插入数据,php,mysql,Php,Mysql,我正在摆弄一些代码来打发时间,我不确定我是否用正确的方法来做这件事。如果可能的话,我将非常感谢您提出更好的方法 我接受了一个查询并添加了一个联合来进行基本相同的查询,但带有一个附加了文本的变量,如“IN” 下面你会看到我做了什么,我做了很多事情,但我担心我是在浪费时间,因为肯定有更好的方法来实现这一点 您必须执行两个单独的查询。将它们放入事务中,以确保它们以原子方式完成 您还应该使用准备好的语句来防止SQL注入 对于中的不需要变量,只需将其硬编码到SQL中即可 if(!empty($_POST[

我正在摆弄一些代码来打发时间,我不确定我是否用正确的方法来做这件事。如果可能的话,我将非常感谢您提出更好的方法

我接受了一个查询并添加了一个联合来进行基本相同的查询,但带有一个附加了文本的变量,如“IN”

下面你会看到我做了什么,我做了很多事情,但我担心我是在浪费时间,因为肯定有更好的方法来实现这一点


您必须执行两个单独的查询。将它们放入事务中,以确保它们以原子方式完成

您还应该使用准备好的语句来防止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 Added
mysqli_report(mysqli_report_error | mysqli_report_STRICT)在我的mysqli连接之前,但我仍然没有收到任何错误。非常感谢@Barmar,我尝试了它,但它没有工作,尽管它没有给出错误。我添加了诸如
值(“$id.”、“$upc.”、“$category.”、“$quantity.”)等值;
值(“$id.”、“$upc.”、“$category.”、“$quantity.”、“$IN”)除此之外,代码是完整的。知道为什么吗?这是我文件的截图。在代码中添加错误检查,请参见So i Added
mysqli_report(mysqli_report_error | mysqli_report_STRICT)在我的mysqli连接之前,但我仍然没有得到任何错误。