# sql abfrage in tabelle speichern



## Thomas_Jung (16. November 2004)

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


----------



## Lapsus (16. November 2004)

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.


----------



## Devil Noxx (16. November 2004)

Benutze die Funktion 
[phpf]mysql_escape_string[/phpf] bzw.
[phpf]mysql_real_escape_string[/phpf]

dann sollte es funktionieren

mfg

Devil


----------



## deep_popel (16. November 2004)

Hallöchen,

probiere es mal einfach so:


```
$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


----------



## Thomas_Jung (16. November 2004)

deep_popel hat gesagt.:
			
		

> Hallöchen,
> 
> probiere es mal einfach so:
> 
> ...



Es geht danke
  gruß thomas


----------



## Thomas_Jung (16. November 2004)

Devil Noxx hat gesagt.:
			
		

> Benutze die Funktion
> [phpf]mysql_escape_string[/phpf] bzw.
> [phpf]mysql_real_escape_string[/phpf]
> 
> ...



hallo
das mit mysql_escape is mir nicht bekannt wie soll das funktionieren?
  
gruß thomas


----------



## Thomas_Jung (16. November 2004)

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" 
  
gruß thomas


----------



## hpvw (16. November 2004)

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:

```
'; 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


----------



## Thomas_Jung (17. November 2004)

hallo
danke für die teilname
es hat am escapen gelegen.    

danke an alle
thomas


----------

