0

Progress 4GL / ABLのphpのhttp://php.net/manual/en/function.mysql-real-escape-string.phpに類似した手順、またはサニタイズされたテキストを作成するために従うProgressコミュニティ内のベストプラクティスはありますか?外部の信頼できないエンティティ(Webサイト、mysqlサーバーおよびAPI)に?

QUOTEまたはQUERY-PREPARE関数は、外部エンティティではなくProgressの動的クエリのテキストをサニタイズするため、機能しません。

4

2 に答える 2

0

自分で巻くのが唯一の方法のようです。私の目的のために、mysql_real_escape_string 関数をエミュレートしました

/* TODO progress auto changes all ASC(0) characters to space or ASC(20) in a non db string. */
/* the backslash needs to go first */
/* there is no concept of static vars in progress (non class) so global variables */
DEFINE VARIABLE cEscape AS CHARACTER EXTENT INITIAL [
 "~\",
 /*"~000",*/
 "~n",
 "~r",
 "'",
 "~""
 ]
 .
DEFINE VARIABLE cReplace AS CHARACTER EXTENT INITIAL [
 "\\",
 /*"\0",*/
 "\n",
 "\r",
 "\'",
 '\"'
 ]
 .

FUNCTION mysql_real_escape_string RETURNS CHARACTER (INPUT pcString AS CHAR):
    DEF VAR ii AS INTEGER NO-UNDO.

    MESSAGE pcString '->'.

    DO ii = 1 TO EXTENT(cEscape):
         ASSIGN pcString = REPLACE (pcString, cEscape[ii], cReplace[ii]).
    END.

    MESSAGE pcString.

    RETURN pcString.
END.
于 2012-08-02T23:23:20.563 に答える
0

引用した例に最も近いのは、これを行う関数を作成することです。

 DEFINE VARIABLE ch-escape-chars AS CHARACTER    NO-UNDO.
 DEFINE VARIABLE ch-string       AS CHARACTER    NO-UNDO.
 DEFINE VARIABLE i-cnt           AS INTEGER      NO-UNDO.

 DO i-cnt = 1 TO LENGTH(ch-escape-char):

     ch-string = REPLACE(ch-string,
                         SUBSTRING(ch-escape-char, i-cnt, 1),
                         "~~" + SUBSTRING(ch-escape-char, i-cnt, 1)).

 END.

どこ

 ch-escape-chars are the characters you want escape'd. 
 ch-string is the incoming string.
 "~~" is the esacap'd escape character. 
于 2012-08-02T20:34:19.333 に答える