D.96. SQL_ESC()

SQL_ESC(string)
Escapt (d. h. maskiert) einfache Anführungszeichen[233] (') in SQL-Befehlen, um SQL Injection[234] zu verhindern. Dies ist hilfreich bei Verwendung der ODBC_...()-Datenbank-Funktionen (siehe Abschnitt D.69, „ODBC_funktionsname()).

Wichtig

Das ist ein gutes Beispiel dafür, warum man nie doppelte Anführungszeichen (") zum Begrenzen von Strings in SQL-Befehlen verwenden sollte, denn diese würden hier nicht maskiert. Also noch einmal: Verwenden Sie, ANSI-SQL-konform, einfache Anführungszeichen!
exten => 123,1,Set(name=philipp)
exten => 123,n,Set(telnr=${ODBC_SQL(SELECT `telnr` FROM `liste` WHERE `name`='${SQL_ESC(${name})}')}
exten => 123,n,Verbose(1,Telefonnummer ist: ${telnr})
Asterisk-Versionen:
        |     |        | 1.4 |————————| 1.6 |————————
Interner Hilfetext zu dieser Funktion in Asterisk 1.4:
  -= Info about function 'SQL_ESC' =-

[Syntax]
SQL_ESC(<string>)

[Synopsis]
Escapes single ticks for use in SQL statements

[Description]
Used in SQL templates to escape data which may contain single ticks (') which
are otherwise used to delimit data.  For example:
SELECT foo FROM bar WHERE baz='${SQL_ESC(${ARG1})}'
Differenz des internen Hilfetexts von Asterisk 1.2 zu 1.4:
— in Asterisk 1.2 nicht vorhanden —
Differenz des internen Hilfetexts von Asterisk 1.4 zu 1.6:
— keine —


[233] Typografisch ist es zwar nicht korrekt, hier von einfachen Anführungszeichen zu sprechen, denn es handelt sich um Apostrophe, aber das lassen wir mal außer Acht. Jeder Programmierer weiß, was gemeint ist.