Zur Navigation

sql Unterabfrage mit Variable

1 webuser

Hallo,
ich will alle Werte aus einer Preistabelle kopieren und in die gleiche Tabelle mit geändertem Jahr anfügen.
Versucht habe ich es mit:
$gjahr = $_POST[gjahr];

        $query=mysqli_query($con,"Insert Into preise (von,bis,preis,gjahr) Select von,bis,preis,'$gjahr' From preise Where gjahr ='$gjahr'") or die ("Error: " . mysqli_error());

14.08.2025 20:47

2 webuser

kleiner Denkfehler: Die Varialbe vom alten Jahr fehlt noch:
$gjahralt = $_POST[gjahralt];
$gjahr = $_POST[gjahr];

        $query=mysqli_query($con,"Insert Into preise (von,bis,preis,gjahr) Select von,bis,preis,'$gjahr' From preise Where gjahr ='$gjahralt'") or die ("Error: " . mysqli_error());

14.08.2025 20:55

3 Jörg Kruse

Fehlermeldung wird nicht ausgegeben?

Aus dem MySQL-Manual:

To avoid ambiguous column reference problems when the SELECT and the INSERT refer to the same table, provide a unique alias for each table used in the SELECT part, and qualify column names in that part with the appropriate alias

also z.B. mit einem Alias p2:

mysqli_query(
    $con,
    "INSERT INTO preise (von, bis, preis, gjahr)
    SELECT p2.von, p2.bis, p2.preis, '" . intval($gjahr) . "'
    FROM preise AS p2
    WHERE gjahr = '" . intval($gjahralt) . "'"
) or die ("Error: " . mysqli_error());

Auch wenn nur du selbst das Script ausführst, würde ich übrigens grundsätzlich und immer Variablen in einer Query gegen SQL-Injection absichern, im Fall von Jahreszahlen z.B. mit intval().

14.08.2025 21:36

1 Forenmitglied fand diesen Beitrag gut

4 webuser

Hallo Jörg,
vielen Dank, auch für deinen Hinweis.
Gruß

14.08.2025 21:52

5 Jörg Kruse

Nachtrag:

die Spalte im WHERE Statement sollte wohl auch den Alias vorangestellt bekommen:

mysqli_query(
    $con,
    "INSERT INTO preise (von, bis, preis, gjahr)
    SELECT p2.von, p2.bis, p2.preis, '" . intval($gjahr) . "'
    FROM preise AS p2
    WHERE p2.gjahr = '" . intval($gjahralt) . "'"
) or die ("Error: " . mysqli_error());

14.08.2025 22:14

1 Forenmitglied fand diesen Beitrag gut

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]