db2 on i的Db2_escape_string替换函数


db2_escape_string replacement function for db2 on i

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

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

但是这变得相当乏味。我使用codeigniter,它有一个db2 on I驱动程序(db2c,如果您感兴趣的话),它有一个_prep_query()函数,可以在执行之前转义我的所有语句,但是我不知道用什么来替换db2_escape_string()。我假设存在一些荒谬的preg_replace()函数可以解决我的问题,但是我的regex技能很糟糕。我甚至不知道从哪里开始。

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

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

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

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

如果你能把转义字符改成反斜杠肯定会更好,但我不知道怎么做,所以…

可能PHP文档中提到的db2_escape_string (http://nz.php.net/manual/en/function.db2-escape-string.php)的其他字符仍然需要用反斜杠转义。

与其尝试在preg_replace调用中复制db2_escape_string函数的功能,我认为您最好调用db2_escape_string,然后修复用反斜杠转义的撇号。

这似乎对我有用(尽管我不明白为什么我需要5个反斜杠而不是3个):

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