sql abfrage in tabelle speichern

Thomas_Jung

Erfahrenes Mitglied
hallo
ich versuche eine abfrage (nicht das ergebnis) in eine tabelle zu speichern is aber anscheinend gar nicht so einfach wie ich gedacht habe.
beispiel
>>$sql = "SELECT * FROM archiv where a_firma = '$userinfo[UserFirma]' AND UserName = '$userinfo[UserName]'";<<

>>INSERT INTO sql_befehle ( a_firma, UserName, befehl) VALUES('$userinfo[UserFirma]', '$userinfo[UserName]', '$sql')");<< funktioniert nicht.

nicht lachen weiß es nicht besser
gruß thomas
 
Das liegt mit Sicherheit daran, dass der String $sql Zeichen enthält, die dein Insertstatement ruinieren... Hier musst du die ' und " entsprechend quoten. Dann sollte das genau so gehen, wie du es vor hast.
 
Benutze die Funktion
[phpf]mysql_escape_string[/phpf] bzw.
[phpf]mysql_real_escape_string[/phpf]

dann sollte es funktionieren

mfg

Devil
 
Hallöchen,

probiere es mal einfach so:

PHP:
$sql_select = "SELECT * FROM archiv where a_firma = '".$userinfo[UserFirma]."' AND UserName = '".$userinfo[UserName]."'";

$sql_insert = "INSERT INTO sql_befehle (a_firma, UserName, befehl) VALUES ('".$userinfo[UserFirma]."', '".$userinfo[UserName]."', '".$sql."')";

müsste eigentlich so funktionieren, wenn ich nix falsch verstanden habe.

mfg popel
 
deep_popel hat gesagt.:
Hallöchen,

probiere es mal einfach so:

PHP:
$sql_select = "SELECT * FROM archiv where a_firma = '".$userinfo[UserFirma]."' AND UserName = '".$userinfo[UserName]."'";

$sql_insert = "INSERT INTO sql_befehle (a_firma, UserName, befehl) VALUES ('".$userinfo[UserFirma]."', '".$userinfo[UserName]."', '".$sql."')";

müsste eigentlich so funktionieren, wenn ich nix falsch verstanden habe.

mfg popel

Es geht danke
gruß thomas
 
Zuletzt bearbeitet:
Devil Noxx hat gesagt.:
Benutze die Funktion
[phpf]mysql_escape_string[/phpf] bzw.
[phpf]mysql_real_escape_string[/phpf]

dann sollte es funktionieren

mfg

Devil

hallo
das mit mysql_escape is mir nicht bekannt wie soll das funktionieren?
:rtfm: :rtfm:
gruß thomas
 
Lapsus hat gesagt.:
Das liegt mit Sicherheit daran, dass der String $sql Zeichen enthält, die dein Insertstatement ruinieren... Hier musst du die ' und " entsprechend quoten. Dann sollte das genau so gehen, wie du es vor hast.

hallo
betreff: Hier musst du die ' und " entsprechend quoten.
welche 'und"
:confused: :confused:
gruß thomas
 
Das SQL-Statement, welches Du speichern möchtest kann einfache und doppelte Anführungszeichen enthalten.
Ich glaube das heißt nicht quoten, sondern escapen, also mit einem Backslash \ markieren.
Aus ' muss also \' werden, aus " entsprechend \".
Das ist es, was die beiden genannten Funktionen für Dich übernehmen.
Bei einem Anführungszeichen in Deinem Eintragen-Statement wird durch die Anführungszeichen, die im einzutragenden Statement stehen, der String, respektive das Statement, welches Du eintragen willst abgeschlossen. Das wird vermieden indem Du die Zeichen escapsed.
Dies ist übrigends eine typische Sicherheitslücke bei SQL-Statements, die mit Usereingaben arbeiten (Stichwort: SQL-Injection).
Ein User kann zum Beispiel folgenden Text zum Eintragen übergeben:
Code:
'; D E L E T E ... ;
(habe das mal mit Leerzeichen geschrieben, will ja nix hier im Forum riskieren)
und so Deine DB löschen, deshalb sollten ALLE Variablen, die in einem Query verwendet werden escaped werden, damit weder absichtlich, noch versehentlich ein Query eingeschleust wird, was so nicht ausgeführt werden soll.

Gruß hpvw
 
Zurück