Sven Rautenberg: MySql Statement - wie ist es richtig?

Beitrag lesen

Moin!

Nur eines zu deinem Kommentar:

  

> SELECT DISTINCT  -- wieso eigentlich DISTINCT?  
>     p.produkt_id,  
>     p.name,  
>     at.AT_Katalognr,  
>     ty.Typ_Name  
> FROM products p  
> INNER JOIN producttyp at  
> ON p.produkt_id = at.ID  
> INNER JOIN productcategorie ptc  
> ON p.produkt_id = ptc.id  
> INNER JOIN typ ty  
> ON at.ID = ty.ID  
> WHERE ptc_kategorie != 13       -- wenn das Zahlen sind, weg mit den  
>                                 -- einfachen Anführungszeichen  
>     AND p.bezeichnung LIKE '%$name%'  

Egal ob das Zahlen oder keine Zahlen sind: Immer rein mit den einrfachen Anführungszeichen! MySQL unterscheidet nicht, ob eine Zahl in Anführungszeichen steht, oder nicht - das Parsing, um aus einem Text eine Zahl zu machen, geschieht so oder so. Aber mit Anführungszeichen drumrum kann man die Zahl dynamisch aus einer Variablen reinschreiben, und weil Variablen, die vom User kommen, ja potentiell böse sein können, kann man auf solche dynamischen Zahlenwerte trotzdem mysql_real_escape_string() anwenden.

Außerhalb von einfachen Anführungsstrichen hingegen würde mysql_real_escape_string() versagen!

Deshalb: Alle Werte, auch reine Zahlenwerte, in MySQL immer in einfache Anführungsstriche packen, und immer escapen, wenn sie nicht statisch im Statement stehen!

- Sven Rautenberg

--
"Love your nation - respect the others."