UPDATE mit variablen
ghostflasher
- datenbank
0 Tom0 Peter Pan- php
0 ChrisB0 ghostflasher0 Tom
Hallo,
ich habe ein problem einen UPDATE befehl bei einer php/mysql site auszuführen.
ich habe mit phpmyadmin folgende query erstellt:
$sql2 = 'UPDATE database
.table
SET
Year
= '111111111',
Name
= '222222222222',
Type
= '3333',
KD
= '444',
CT
= '555',
size
= '66',
rate
= '777777777',
description
= '8888888888888'
WHERE table
.NR
= 3 LIMIT 1;';
Das ganze funktioniert auch einwandfei.
Nun will ich aber variabeln einsetzen, was irgendwie nicht ganz klappen will. Beispiel:
$sql2 = 'UPDATE database
.table
SET
Year
= ' . $var1 . ',
Name
= ' . $var2 . ',
Type
= ' . $var23 . ',
KD
= ' . $var4 . ',
CT
= ' . $var5 . ',
size
= ' . $var6 . ',
rate
= ' . $var7 . ',
description
= ' . $var8 . ',
WHERE table
.NR
= 3 LIMIT 1;';
Es gibt keine Fehlermeldung, aber die Variablen werden auch nicht eingesetzt.
Wer kann mir helfen?
Hello,
Nun will ich aber variabeln einsetzen, was irgendwie nicht ganz klappen will. Beispiel:
$sql2 = 'UPDATE
database
.table
SET
Year
= '' . mysql_escape_string($var1) . '',
Auf die Häkchen bei String- und Datumssplatentypen darfst Du nicht verzeichten
bitte benutzte mysql_escape_string() oder mysql_real_escape_string() oder eine
vergleichbare Funktion zur Vorbereitung Deiner Werte für die Textschnittstelle
Ganze Zahlen solltest Du mit intval() absichern. Sie können dann auch ohne Häkchen stehen.
NULL und FALSE stehen ebenfalls ohne Häkchen.
Es gibt keine Fehlermeldung, aber die Variablen werden auch nicht eingesetzt.
Wer kann mir helfen?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Wer kann mir helfen?
Zur Not: bete;-)
Aber zunächst versuche bitte mal ein echo $sql2;
_ohne_ die Query an den DB-Server zu leiten und teile dem Forum das Ergebnis mit.
Die Ausgabe einer DB-Server-Fehlermeldung kann (nach Ausführung) unbedingt zweckdienliche Hinweise für die Verhaftung des Delinquenten geben.
off:P'Déja-vu'P
Hi,
$sql2 = 'UPDATE `database`.`table` SET
`Year` = ' . $var1 . ',
`Name` = ' . $var2 . ',
`Type` = ' . $var23 . ',
`KD` = ' . $var4 . ',
`CT` = ' . $var5 . ',
`size` = ' . $var6 . ',
`rate` = ' . $var7 . ',
`description` = ' . $var8 . ',
WHERE `table`.`NR` = 3 LIMIT 1;';
Verwendung von [code]-Tags macht das ganze besser lesbar.
Es gibt keine Fehlermeldung, aber die Variablen werden auch nicht eingesetzt.
error_reporting auf E_ALL, display_errors auf on?
Wie kontrolliert - Kontrollausgabe?
Variablen vorhanden? (Warum so komisch benannt - sicher, dass du keine Arrays verwenden willst? Das ist fast immer der Fall, wenn jemand anfängt, Variablennamen "durchzunummerieren".)
Dass die SQL-Syntax nicht mehr stimmt, sobald du da nicht-nummerische Werte verwendest, ist dir klar?
Und informiere dich über SQL Injection, und was man dagagen unternehmen muss.
MfG ChrisB
Hi,
$sql2 = 'UPDATE database
.table
SET
Year
= ' . $var1 . ',
Name
= ' . $var2 . ',
Type
= ' . $var23 . ',
KD
= ' . $var4 . ',
CT
= ' . $var5 . ',
size
= ' . $var6 . ',
rate
= ' . $var7 . ',
description
= ' . $var8 . ',
WHEREtable
.NR
= 3 LIMIT 1;';
>
> Verwendung von ~~~
-Tags macht das ganze besser lesbar.
>
> »» Es gibt keine Fehlermeldung, aber die Variablen werden auch nicht eingesetzt.
>
> error_reporting auf E_ALL, display_errors auf on?
> Wie kontrolliert - Kontrollausgabe?
> Variablen vorhanden? (Warum so komisch benannt - sicher, dass du keine Arrays verwenden willst? Das ist fast immer der Fall, wenn jemand anfängt, Variablennamen "durchzunummerieren".)
>
Diese Variablen benutze ich weil es ein Beispiel ist.
> Dass die SQL-Syntax nicht mehr stimmt, sobald du da nicht-nummerische Werte verwendest, ist dir klar?
>
Nein, ist mir nicht klar, deswegen frage ich nach.
> Und informiere dich über SQL Injection, und was man dagagen unternehmen muss.
>
Habe eine "cleaner Funktion geschrieben, welche meine Variabeln "säubert".
echo $sql2; ergibt:
[code lang=sql]
UPDATE `database`.`table`
SET `Year` = 1234,
`Name` = '222222222222',
`Type` = '3333',
`KD` = '444',
`CT` = '555',
`size` = '66',
`rate` = '777777777',
`description` = '8888888888888'
WHERE `bicycles`.`NR` = 3 LIMIT 1;
MfG ChrisB
Hello,
$sql2 =
"UPDATE `database`.`table`
SET
`Year` = '$var1',
`Name` = '$var2',
`Type` = '$var23',
`KD` = '$var4',
`CT` = '$var5',
`size` = '$var6',
`rate` = '$var7',
`description` = '$var8',
WHERE `table`.`NR` = 3 LIMIT 1';
Und informiere dich über SQL Injection, und was man dagagen unternehmen muss.
Habe eine "cleaner Funktion geschrieben, welche meine Variabeln "säubert".
Wenn Deine "cleaner function" mit der für die Datenbank passenden Funktion arbeitet, dann kannst Du das Statement auch so schreiben, wie oben dargestellt.
Wenn Du ein Array für die Daten benutzt, dessen Werte Du dann mit mysql_(real_)escape_string() behandelt hast (geht NICHT für NULL und FALSE) dann kannst Du das Statement auch so schreiben, wie unten dargestellt.
$sql2 =
"UPDATE `database`.`table`
SET
`Year` = '{$_sqldata[1]}',
`Name` = '{$_sqldata[2]}',
`Type` = '{$_sqldata[3]}',
`KD` = '{$_sqldata[4]}',
`CT` = '{$_sqldata[5]}',
`size` = '{$_sqldata[6]}',
`rate` = '{$_sqldata[7]}',
`description` = '$_sqldata[8]}',
WHERE `table`.`NR` = 3 LIMIT 1';
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg