Hallo,
ich habe eine Funktion updateCol($user, $value, $col). Ich rufe diese Funktion wie folgt auf:
Ohne Prepared Statements funktioniert alles soweit. Aus sicherheitstechnischen Gründen stelle ich jetzt jedoch sämtliche Datenbankzugriffe auf Prepared Statements um, Escapen kommt dabei nicht in Frage. Und so lautet meine umgebaute Funktion wie folgt:
Jetzt habe ich allerdings das Problem das mein übergebener Wert in $value also '`Logins`+1' als String-Platzhalter vorbelegt wurde (Logins ist hierbei der Name der Spalte welche nichts weiter macht als nach jedem erfolgreichen Login den Zähler um 1 zu erhöhen) Ich vermute das durch den Platzhalter der gesamte Ausdruck als String an die SQL-Abfrage übergeben wird und somit mein Zähler nie inkrementiert wird. Wenn ich meiner Funktion den Parameter ohne Hochkommatas übergebe also `Logins`+1, so erhöht sich der Zähler auf 1 und bleibt dort aber auch stehen, weil vermutlich jedesmal die 1 dem Ausdruck entnommen wird. Ich hoffe ich konnte das Problem einigermaßen schildern. Meine Frage ist jetzt wie ich den Ausdruck via Prepared Statements so in meine SQL-Abfrage inkludieren kann, damit dort wirklich steht:
Wie gesagt, die Problematik sehe ich beim Übergabeparameter $value.
Mit freundlichen Grüßen
Cappaja
ich habe eine Funktion updateCol($user, $value, $col). Ich rufe diese Funktion wie folgt auf:
PHP:
updateCol($account['user'], '`Logins`+1', Logins);
Ohne Prepared Statements funktioniert alles soweit. Aus sicherheitstechnischen Gründen stelle ich jetzt jedoch sämtliche Datenbankzugriffe auf Prepared Statements um, Escapen kommt dabei nicht in Frage. Und so lautet meine umgebaute Funktion wie folgt:
PHP:
function updateCol($user, $value, $col)
{
$db = new mysqli('localhost', 'root', '', 'mydb')
or die("Es konnte keine Verbindung zum Datenbankserver hergestellt werden!");
$sql = "UPDATE `login` SET `$col` = ? WHERE `User` = ?";
$command = $db->prepare($sql);
$command->bind_param('ss', $value, $user);
$command->execute();
$command->close();
$db->close();
}
Jetzt habe ich allerdings das Problem das mein übergebener Wert in $value also '`Logins`+1' als String-Platzhalter vorbelegt wurde (Logins ist hierbei der Name der Spalte welche nichts weiter macht als nach jedem erfolgreichen Login den Zähler um 1 zu erhöhen) Ich vermute das durch den Platzhalter der gesamte Ausdruck als String an die SQL-Abfrage übergeben wird und somit mein Zähler nie inkrementiert wird. Wenn ich meiner Funktion den Parameter ohne Hochkommatas übergebe also `Logins`+1, so erhöht sich der Zähler auf 1 und bleibt dort aber auch stehen, weil vermutlich jedesmal die 1 dem Ausdruck entnommen wird. Ich hoffe ich konnte das Problem einigermaßen schildern. Meine Frage ist jetzt wie ich den Ausdruck via Prepared Statements so in meine SQL-Abfrage inkludieren kann, damit dort wirklich steht:
PHP:
$sql = "UPDATE `login` SET `Logins` = `Logins`+1 WHERE `User` = 'irgendEinName'";
Wie gesagt, die Problematik sehe ich beim Übergabeparameter $value.
Mit freundlichen Grüßen
Cappaja