Linux odbc Неустранимая ошибка: допустимый объем памяти
В настоящее время у меня есть некоторые проблемы с настройкой интрасети с помощью ссылки odbc между AS400 (iseries V6R1) и Debian. Я использую 64-битный драйвер iseriesAccess7.1 odbc, unixODBC2.3.1 и php5.4 с поддержкой unixODBC.
Моя ссылка кажется хорошей, потому что я могу подключиться к своей базе данных с помощью команды isql (которая является частью unixODBC) и выполнить некоторые запросы SQL, но невозможно прочитать записи в базе данных, используя скрипт php. Когда я пытаюсь запустить небольшой скрипт в своей интрасети, я получаю следующую ошибку:
Неустранимая ошибка: допустимый объем памяти 134217728 байт исчерпан (попытка выделить 493921239296 байт) в /home/www/imypdo/imypdo.php в строке 122
это более 450 Гб! и ничего в / var / log / messages и в / etc / httpd / logs / error_log
Простой SQL-запрос (только с 1 строкой в select) вернет некоторые странные символы (см. Ниже), и как только я выберу еще 1 или 2 строки, произойдет ошибка размера памяти.
[0] => Массив ([ADHMAR] => AAAAAAA a @ YÿŒ4 – X 0! ŸŒ4làÿŒ4làÿŒ4!)
Я почти уверен, что это проблема, связанная с 64-битным драйвером, потому что у меня уже есть другой Debian, связанный с этим iseries, но с 32-битным драйвером, и он отлично работает. Что странно, так это то, что команда isql работает, а в файлах журналов ничего нет ...
если это действительно проблема с 64-битным драйвером, как я могу доказать это IBM?
любая помощь будет оценена
Спасибо
--------------------------- Класс для подключения -------------------- --------
private $_bdd = "DSN=db2;",
$_user = "USERNAME",
$_pwd = "Password";
private $_con,
$_isConnected;
public function open_connection(){
$this->_con = odbc_connect ($this->_bdd, $this->_user, $this->_pwd ) or die("Error Connection") ;
$this->_isConnected = true;
}
public function close_connection(){
odbc_close($this->_con);
$this->_isConnected = false;
}
public function execute($sql){
if(!($this->_isConnected))
$this->open_connection();
#execute sql
$res = odbc_exec($this->_con, $sql);
return $res;
}
public function fetchRow($res){
$row = odbc_fetch_array($res);
return $row;
}
}
--------------------------------- Query Script --------------- ---------------
public function getPhoneLogsByDate($startDate, $endDate) {
$startDate = date('Ymd', strtotime($startDate));
$endDate = date('Ymd', strtotime($endDate));
$rr = new As400_Model_as400query();
$rr->open_connection();
$sql = "select trim(tluser) as USER, trim(tlacct) as CLIENT, trim(concat(concat(concat(concat(concat(concat(substr(trim(tldate),1,4),'-'),substr(trim(tldate),5,2)),'-'),substr(trim(tldate),7,2)),' '), concat(concat(concat(concat(substr( substr(trim(tltime+1000000),2,6),1,2),':'),substr(substr(trim(tltime+1000000),2,6),3,2)),':'), substr(substr(trim(tltime+1000000),2,6),5,2)))) as DATETIME
,trim(concat(concat(concat(concat(concat(concat(concat(concat(concat(concat(trreas,'|'),trsr01),'|'),trsr02),'|'),trsr03),'|'),trsr04),'|'),trsr05)) as REASONS
,trim(concat(concat(concat(tnnot1,tnnot2),tnnot3),tnnot4)) as NOTES
from cabledta.tlogmstr left join cabledta.tlogreas on trnum#=tlnum# left join cabledta.tlognote on tnnum#=tlnum#
where tldate>='".$startDate."' and tldate <='".$endDate."'";
$res = $rr->execute($sql);
$response = array();
while ($row = $rr->fetchRow($res)){
$response[] = array(
'userName' => $row['USER'],
'clientNumber' => $row['CLIENT'],
'logDateTime' => $row['DATETIME'],
'logReasons' => $row['REASONS'],
'logNotes' => utf8_encode($row['NOTES'])
);
}
$rr->close_connection();
return $response;
}