几天来,我一直在尝试以下操作:我有一个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);
?>
答案 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