php / mysql insert values aus variable

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php_mysql_insert_values_aus_variable_217700/page_1 - zur Vollversion wechseln!


Redphex schrieb am 21.07.2010 um 11:03

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?


Esh schrieb am 21.07.2010 um 11:05

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 schrieb am 21.07.2010 um 11:06

probier mal:

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


mat schrieb am 21.07.2010 um 11:09

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 schrieb am 21.07.2010 um 11:56

merci :)
worx


Ringding schrieb am 21.07.2010 um 13:09

Hier ist mal wieder das angebracht. :D


watchout schrieb am 21.07.2010 um 14:06

SQL injection wird wohl immer ein Thema bleiben... ;)


that schrieb am 21.07.2010 um 21:18

Gibts in PHP keine gebundenen Query-Parameter, so wie in echten Programmiersprachen?


watchout schrieb am 21.07.2010 um 22:42

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 schrieb am 22.07.2010 um 00:23

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 schrieb am 22.07.2010 um 00:38

Nachdem das Thema eh schon abgeglitten ist...
Wie löst du
IN(...)
mit einer variablen Argumentliste?


mat schrieb am 22.07.2010 um 01:31

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 schrieb am 31.07.2010 um 11:09

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 :/




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026