• 19.04.2024, 03:11
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

$wheres[] ? php mysql

Sonntag, 1. März 2009, 18:29

guten abend zusammen,

bin gerade dabei mich in php zu versuchen.
soweit so gut.

jetzt bin ich darüber gestolpert:

"
$wheres[] = 'sc.published = 1';
"
kommt als teil einer sql abfrage vor.

die eckigen klammern stehen ja in sql als ne art platzhalter,
aber da sie direkt hinter der variablen stehen nehme ich an das die was anderes zu bedeuten haben?

google scheint die eckigen klammer auch als etwas zu interpretieren,
denn da finde ich so nichts.

thx!

Dienstag, 3. März 2009, 15:47

Nein, das ist nicht Teil der SQL-Abfrage, sondern PHP-Code. `$foo[] = 123;` fügt den Wert `123` am Ende des Arrays `$foo` an, entspricht damit also in etwa `array_push($foo, 123);` (wenn ich die Signatur richtig in Erinnerung habe).

In diesem Fall werden `WHERE`-Bedingungen als Textsegmente in ein Array eingefügt und vermutlich am Ende alle Elemente in der Art `implode(' AND ', $wheres)` zu eniem gemeinsamen String zusammengefügt.

An dieser Stelle noch der Hinweis, dass das manuelle Erstellen von SQL sehr schnell zu Angriffspunkten für SQL-Injection führen kann. Deutilch sicherer und angenehmer zu benutzen sind ORMs, objektrelationale Mapper, mit denen man eine objektorientierte API zu den Tabellen und Daten eines relationalen DBMS erhält. In der Regel rechtfertigen die Vorteile den Nachteil der notwendigerweise etwas geringeren Performance (wobei in der Regel die Verbindung zum DBMS und andere IO-Operationen der Flaschenhals sind, nicht der zusätzliche Code). Was da zur Zeit in PHP angesagt ist, weiß ich allerdings nicht. Für Python ist SQLAlchemy eine exzellente Bibliothek, während zunehmend andere (etwa dokumentenbasierte oder objektorientierte) und nicht relationale Datenbanksysteme verwendet werden.