На Zend Server мы обновились до PHP 7, который сломал скрипт PHP. Пользователь может вставить текст из документа в текстовую область, которая затем отправляется в файл DB2 через SQL. До PHP 7 я использовал это, чтобы убедиться, что апострофы были отправлены …
$lineout = ereg_replace("'", "''", $line[$a]);
Конечно, это устарело, и я заменил его на …
$lineout = preg_replace("/'/", "/''/", $line[$a]);
Теперь скрипт только отправляет текст до первого слова, которое имеет апостроф. Я играл с этим некоторое время и должен обратиться за помощью. Предложения?
Я изучил утверждение db2_prepared и до сих пор не получаю нужных апострофов. Обновление используемого кода …
if ($b < 999) {
$conn = db2_connect($_SESSION['i5'] , decode($_SESSION['def_user'],
$_SESSION['key']), decode($_SESSION['def_pwd'], $_SESSION['key']),
array(i5_lib=>$_SESSION['lib']));
if (!$conn) { echo 'bad';
die(i5_errormsg());
}
$query = "delete from tmpdesc where deprcl = '$parcel'";
$stmt = db2_exec($conn, $query);
for ($a = 0; $a <= $b; $a++) {
$query = "insert into tmpdesc (deprcl, derecn, dedesc) values('$parcel',
$a+1, '$line[$a]')";
$prepared_query = db2_prepare($conn, $query);
$stmt = db2_exec($conn, $prepared_query);
if (!$stmt) {
echo 'Error during query insertion<br/>Code: ' . i5_errno($conn)
. '<br/>';
echo 'Message: ' . i5_errormsg($conn) . '<br/>';
}
}
echo '<p><br/>Legal descriptions have been sent.</p>';
return '0';
} else {
echo '<font color=red>You have ', $b, ' lines of descriptions which is
more than the 999 allowed.</font>';
return '1';
}
Поэтому, если пользователь вводит ферму Андерсона в текстовой области, то в файле DB2 появляется Ферма Андерсона даже с подготовленным оператором.
Задача ещё не решена.
Других решений пока нет …