"We are back" « oc.at

php / mysql insert values aus variable

Redphex 21.07.2010 - 11:03 2139 12
Posts

Redphex

Legend
RabbitOfNegativeEuphoria
Registered: Mar 2000
Location: Kadaverstern
Posts: 11815
Hoi

Ich hab da folgendes Problem:

In einem PHP script inserte ich Werte aus einer Variablen in die Datenbank via
Code:
mysql_query("insert into tablename value ('$var1')");

Alles wunderbar - nur haut's eam auf, wenn in der Variable selbst ein ' enthalten ist.
Was müsst ich ändern, damit er auch solche Werte richtig verarbeitet?
Bearbeitet von Redphex am 21.07.2010, 11:57

Esh

Bloody Newbie
Registered: May 2010
Location: Wien
Posts: 18
ist zwar schon lange her, aber afaik musst sie escapen:

http://php.net/manual/en/function.addslashes.php

edit: description beachten -> gibt vll bessere möglichkeiten als die funktion addslashes selbst

Neo1010

.
Registered: May 2003
Location: -
Posts: 1212
probier mal:

mysql_query("insert into tablename value (\"$var1\")");

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25494
Die richtige Antwort ist mysql_real_escape_string(). addslashes() hat Sicherheitsprobleme. ;)

In deinem Fall wäre das dann:

Code:
mysql_query("insert into tablename value ('".mysql_real_escape_string($var1,$link)."')",$link);

Redphex

Legend
RabbitOfNegativeEuphoria
Registered: Mar 2000
Location: Kadaverstern
Posts: 11815
merci :)
worx

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Hier ist mal wieder das angebracht. :D

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
SQL injection wird wohl immer ein Thema bleiben... ;)

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11342
Gibts in PHP keine gebundenen Query-Parameter, so wie in echten Programmiersprachen?

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Glaub schon (in php5), aber man muss es verwenden, genauso wie man in anderen Sprachen auch den gleichen Mist verzapfen kann wie in PHP ;)

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25494
Ich löse das gerne mit vsprintf(). Somit wird der SQL-Code erst kurz vor dem Ausführen des Queries erzeugt und vorab ordentlich geprüft. %s also Strings werden mit mysql_real_escape_string() gesichert, Zahlen werden automatisch gecasted usw. Damit hat sich ein Großteil der Sorgen durch SQL-Injections erledigt, den Rest muss das Gehirn machen. ;)

Ein Vorteil der Technik ist übrigens ein schöner SQL-Code, der nicht mit eingefügten PHP-Variablen und diversen String-Operationen unleserlich gemacht wird.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Nachdem das Thema eh schon abgeglitten ist...
Wie löst du
IN(...)
mit einer variablen Argumentliste?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25494
Habe ich bisher nicht substituieren müssen. Aber wenn, dann würde ich unter Umständen einen eigenen Parameter dafür nutzen (zB %a) und an dessen Stelle das als String dargestellte Array (zB 'value1','value2', ...) einsetzen.

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4466
Zumindest in PHP haben prepared Statements (via PDO) einen Nachteil beim Debuggen: man sieht nicht, was wirklich zum Server geschickt wird und kanns nicht einfach in eine SQL Shell kopieren :/
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz