Функция замены db2_escape_string для db2 на i - PullRequest
2 голосов
/ 03 мая 2011

PHP-функция db2_escape_string () использует обратную косую черту \ в качестве escape-символа.По какой-то причине мой экземпляр DB2 on i ожидает экранирования ' при экранировании строки.Мое решение до сих пор было str_replace ():

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

Но это становится довольно утомительным.Я использую codeigniter, у которого есть драйвер db2 on i (db2c, если вам интересно), который имеет функцию _prep_query (), которая может выполнять все мои операторы перед выполнением, но я не знаю, что заменить db2_escape_string() с.Я предполагаю, что существует какая-то нелепая функция preg_replace (), которая решит мою проблему, но мои навыки регулярных выражений ужасны.Я даже не знаю, с чего начать.

В качестве альтернативы, если кто-то знает, как изменить escape-символ в DB2 на i на обратную косую черту, это решило бы мою проблему.,,или если бы мы могли запретить апострофы в английском языке.

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Я бы предложил использовать подготовленные операторы ( db2_prepare , за которыми следует db2_execute ) вместо raw sql (db2_exec), чтобы избежать проблемы с выходом строки.Параметры, которые вы передаете в db2_execute, будут автоматически экранированы правильным образом.

Если вы сталкиваетесь с проблемами кодирования, utf8_decode может помочь.

Подготовленные операторы предотвращают возможностьвраждебной инъекции SQL.В DB2 они также позволяют вставлять более 32 тыс. Данных одновременно.

0 голосов
/ 04 мая 2011

Определенно было бы лучше, если бы вы могли изменить управляющий символ на обратную косую черту, но я не знаю, как это сделать, так что ...

Предположительно, другие символы, упомянутые в документации PHP для db2_escape_string (http://nz.php.net/manual/en/function.db2-escape-string.php) по-прежнему нужно экранировать с помощью обратной косой черты.

Вместо того, чтобы пытаться копировать функциональность функции db2_escape_string в вызове preg_replace, я думаю, что вам лучше вызывать db2_escape_string, а затем исправлять апострофы, которыемне удалось избежать обратной косой черты.

Мне показалось, что это работает (хотя я не могу понять, почему мне нужно 5 обратных косых черт вместо 3):

$var = db2_escape_string($var);
$var = preg_replace('/\\\\\'/',"''",$var);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...