Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie sieht die Interna einer vorbereiteten Anweisung aus?

Wenn Sie versuchen, das zu tun, was sich anhört, als würden Sie versuchen, es zu tun ... versuchen Sie es nicht.

Das ist nicht das, was eine vorbereitete Anweisung ist (oder zumindest sollte sie das nicht sein).

Ihr Clientcode sollte nicht versuchen, Werte in die Abfragezeichenfolge zu interpolieren, um eine "fertige" Abfrage zu generieren, die zur Ausführung an den Server gesendet wird. Das ist ein Rezept für eine Katastrophe, ganz zu schweigen von einem falschen Sicherheitsgefühl.

Vorbereitete Anweisungen liefern die Anweisung mit ? Platzhalter unverändert an den Server, wobei der Server die Anweisung für die Ausführung "vorbereitet" ... und dann der Client die Parameter zur Ausführung an den Server sendet ("die Parameter bindet"). Dadurch wird der Server nie verwirrt, „welcher Teil das SQL ist“ und „welcher Teil die Daten sind“, wodurch eine SQL-Einschleusung unmöglich wird und ein Escape und die Bereinigung der Daten unnötig werden.

Wenn Sie nicht direkt mit der C-API kommunizieren, sollten Sie die Methoden in Ihrer Bibliothek aufrufen, die Ihnen dieselben Funktionen zur Verfügung stellen.