PHP的db2_escape_string()函数使用反斜杠\
作为转义字符。无论出于何种原因,我的DB2实例在转义字符串时都需要一个撇号'
。到目前为止我的解决方案是str_replace():
str_replace("'", "''", $var);
但那变得相当乏味。我正在使用codeigniter,它有一个db2 on i驱动程序(db2c,如果你感兴趣的话),它有一个_prep_query()函数,它可以在执行前转义我的所有语句,但我不知道要替换db2_escape_string ()用。我假设存在一些荒谬的preg_replace()函数可以解决我的问题,但我的正则表达式技巧很糟糕。我甚至不知道从哪里开始。
或者,如果有人知道如何将i上的DB2中的转义字符更改为反斜杠,那么这将解决我的问题。 。 。或者我们是否可以禁止使用英语的撇号。
答案 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);