从两个表中选择数据,然后将其插入新表? (SQL / PHP)

时间:2019-01-29 09:20:12

标签: php sql mysqli

几天来,我一直在尝试以下操作:我有一个HTML表单。接收到数据(MENGE / PRODUKT / LIEFERANT)后,我想将数据插入到“ bestellung”表中。为此,我需要来自两个不同表的两个不同数据点:WARE表中的Waren_ID和kunde_lieferant表中的kunde_lieferant_ID。

每次尝试此操作时,都会收到新错误,无论使用哪种格式(语法,...)。我已经阅读了数十篇Stack Overflow的帖子,但没有一篇帮助我。有人可以给我提示:-)

<?php
$server="localhost";
$username="xy";
$passwort="xy";
$database="xy";
$conn=mysqli_connect($server, $username, $passwort, $database)
or die ("Fehler im System");


if (!empty($_POST["Lieferant"]) AND !empty ($_POST["Produkt"]) AND !empty ($_POST["Menge"]))
{

$Menge = $_POST ["Menge"];
$Produkt = $_POST["Produkt"];
$Lieferant = $_POST ["Lieferant"];


$sql="SELECT Waren_ID FROM ware WHERE Name='$Produkt'";
$speichern = mysqli_query($conn, $sql);
$rs = mysqli_fetch_array($speichern);
$Waren_ID=$rs['Waren_ID'];

$abfrage="SELECT kunde_lieferant_ID FROM kunde_lieferant WHERE Name='$Lieferant'";
$result = mysqli_query($conn, $abfrage);
$ts = mysqli_fetch_array($result);
$kunde_lieferant_ID=$ts['kunde_lieferant_ID'];


$final="INSERT INTO bestellung (Menge, Waren_ID, kunde_lieferant_ID) values ($Menge, $Waren_ID, $kunde_lieferant_ID)";
$ende=mysqli_query($conn, $final)
or die ("Fehlgeschlagen: SQL-Error:" . mysqli_error($conn));
}

mysqli_close($conn);
?>

2 个答案:

答案 0 :(得分:0)

MYSQLI_ASSOC上添加mysqli_fetch_array()作为第二个参数,以使用键名而不是整数索引号:

$rs = mysqli_fetch_array($speichern);变为$rs = mysqli_fetch_array($speichern, MYSQLI_ASSOC);

$ts = mysqli_fetch_array($result);变为$ts = mysqli_fetch_array($result, MYSQLI_ASSOC);

您还可以使用$rs = mysqli_fetch_assoc($speichern);$rs = mysqli_fetch_assoc($speichern);通过键名而不是索引来访问关联数组。

答案 1 :(得分:0)

insert语句中的一个潜在问题是您没有单引号传递给MySQL的值:这意味着它们全都是数字(例如,“ Menge”是数字?)。

为避免这种情况并防止代码被SQL注入,您可能应该使用参数化查询。

通过更全局地查看代码,我认为您应该能够在单个INSERT ... SELECT语句中实现所需的目标,例如:

INSERT INTO bestellung
SELECT
    :menge, 
    w.Waren_ID, 
    k.kunde_lieferant_ID
FROM
    ware w
    INNER JOIN kunde_lieferant k
        ON k.Name = :lieferant
WHERE w.Name = :produkt