db2上的db2_escape_string替换函数

时间:2011-05-03 19:54:48

标签: php db2 ibm-midrange

PHP的db2_escape_string()函数使用反斜杠\作为转义字符。无论出于何种原因,我的DB2实例在转义字符串时都需要一个撇号'。到目前为止我的解决方案是str_replace():

str_replace("'", "''", $var);

但那变得相当乏味。我正在使用codeigniter,它有一个db2 on i驱动程序(db2c,如果你感兴趣的话),它有一个_prep_query()函数,它可以在执行前转义我的所有语句,但我不知道要替换db2_escape_string ()用。我假设存在一些荒谬的preg_replace()函数可以解决我的问题,但我的正则表达式技巧很糟糕。我甚至不知道从哪里开始。

或者,如果有人知道如何将i上的DB2中的转义字符更改为反斜杠,那么这将解决我的问题。 。 。或者我们是否可以禁止使用英语的撇号。

2 个答案:

答案 0 :(得分:1)

我建议使用预准备语句(db2_prepare,后跟db2_execute)而不是原始sql(db2_exec)作为避免字符串转义问题的方法。传递给db2_execute的参数将以正确的方式自动转义。

如果您遇到编码问题,utf8_decode可能会有所帮助。

准备好的语句可以防止恶意SQL注入的可能性。在DB2中,它们还允许您一次插入超过32k的数据。

答案 1 :(得分:0)

如果您可以将转义字符更改为反斜杠,肯定会更好,但我不知道如何做到这一点......

假设db2_escape_string(http://nz.php.net/manual/en/function.db2-escape-string.php)的PHP文档中提到的其他字符仍然需要使用反斜杠进行转义。< / p>

我认为你最好调用db2_escape_string然后修复用反斜杠转义的撇号,而不是试图在preg_replace调用中复制db2_escape_string函数的功能。

这似乎对我有用(虽然我很难理解为什么我需要5个反斜杠而不是3个):

$var = db2_escape_string($var);
$var = preg_replace('/\\\\\'/',"''",$var);