Я два IBMi средыPHP Откат на IBMi db2 не работает
развития
- OS400 V7R1M0 обновляется с последними кумулятивный ПТФ,
- PHP Версия: 5.6.5
- Zend Server Версия: 8.0.2
производство
- OS400 V7R1M0 обновляется с последними кумулятивного ПТФ
- PHP Version: 5.3.8
- Zend Server Version: 5.5.0
У меня есть вопрос, связанный с AUTOCOMMIT и откат. Используя следующий скрипт php на обеих средах, я получаю разные типы поведения. Разработка IBMi правильно помещает записи в таблицу и после откат удаляет их. С другой стороны, производственные записи записывают записи в таблицу, , но не запускают команду отката и записи остаются в файле. Очевидно, что я запустил то же самое, действия, необходимые для активации JOURNALING в таблице/файле.
Я заметил, что команда отката работает с одним и тем же файлом и с программой RPG!
Кто-нибудь знает некоторые ошибки или проблемы, связанные с этой проблемой в отношении ZendServer или PHP-версии?
Заранее спасибо
Script:
<?php
ini_set('display_errors', 'On');
ini_set('max_execution_time', 0);
error_reporting(E_ALL);
$options = array(
'i5_naming' => DB2_I5_NAMING_ON,
'DB2_ATTR_CASE' => DB2_CASE_LOWER,
'autocommit' => DB2_AUTOCOMMIT_OFF,
'i5_commit' => DB2_I5_TXN_READ_COMMITTED
);
$conn = db2_connect('DBNAME', 'USER', 'PASSWORD', $options);
if ($conn) {
$stmt = db2_exec($conn, "SELECT count(*) FROM TEST9P");
$res = db2_fetch_array($stmt);
echo $res[0] . "\n";
$ac = db2_autocommit($conn);
if ($ac == 0) {
print "$ac -- AUTOCOMMIT is off.\n";
}
else {
print "$ac -- AUTOCOMMIT is on.\n";
}
// Delete all rows from TEST9P
for ($i = 0;$i < 10;$i++) {
db2_exec($conn, "INSERT INTO TEST9P (test01) VALUES (" . $i . ")");
}
$stmt = db2_exec($conn, "SELECT count(*) FROM TEST9P");
$res = db2_fetch_array($stmt);
echo $res[0] . "\n";
// Roll back the DELETE statement
db2_rollback($conn);
$stmt = db2_exec($conn, "SELECT count(*) FROM TEST9P");
$res = db2_fetch_array($stmt);
echo $res[0] . "\n";
db2_close($conn);
}
Фактически вы не начинаете транзакцию. Итак, что нужно откат? – hek2mgl
В более старых версиях ibm_db2, таких как у вас, вы должны установить ibm_db2.в /usr/local/zendsvr6/etc/conf.d/ibm_db2.ini –
i5_allow_commit = 1 @ hek2mgl Сделка начинается с подключения, установив 'AutoCommit' => DB2_AUTOCOMMIT_OFF 'i5_commit' => DB2_I5_TXN_READ_COMMITTED в опциях ! –