Edit report at https://bugs.php.net/bug.php?id=77468&edit=1
ID: 77468
Updated by: cmb@php.net
Reported by: thomas dot wiedmann at laek-bw dot de
Summary: zend_mm_heap corrupted
Status: Assigned
Type: Bug
Package: PDO OCI
Operating System: Windows 7 (Win64)
PHP Version: 7.3.1
Assigned To: sixd
Block user comment: N
Private report: N
New Comment:
> I am not sure in which PHP version this error is fixed.
Since this ticket has not been closed, the bug is not fixed yet.
Previous Comments:
------------------------------------------------------------------------
[2019-07-24 08:34:19] thomas dot wiedmann at laek-bw dot de
I am not sure in which PHP version this error is fixed. Am I waiting for 7.4 ?
Thanks!
------------------------------------------------------------------------
[2019-01-21 09:44:22] thomas dot wiedmann at laek-bw dot de
Forth piece
----[PL/SQL Package Body]----
CREATE OR REPLACE PACKAGE BODY tw_pkg_bearbeiter
IS
/**
* Globale Variablen für Tabelle: BEARBEITER
*/
g_nBearbeiter bearbeiter.bearbeiter%TYPE;
g_sArt bearbeiter.art%TYPE;
g_nZahl bearbeiter.zahl%TYPE;
g_sText bearbeiter.text%TYPE;
/**
* Verarbeitungsstatus
*/
g_nStatus NUMBER := 0;
g_nEOF NUMBER := 0;
error_code NUMBER := SQLCODE;
error_msg VARCHAR2(512) := SQLERRM;
CURSOR curBearbeiterRead(p_nBearbeiter NUMBER, p_sArt VARCHAR2 ) IS
SELECT
bearbeiter,
art,
zahl,
text
FROM bearbeiter
WHERE bearbeiter = p_nBearbeiter
AND art = p_sArt;
recBearbeiterRead curBearbeiterRead%ROWTYPE;
/**
* globale Variable zu BEARBEITER initialisieren
*/
PROCEDURE Init
IS
BEGIN
g_nBearbeiter := NULL;
g_sArt := NULL;
g_nZahl := NULL;
g_sText := NULL;
END;
/**
* Datensatz direkt lesen
*/
PROCEDURE Read (p_nBearbeiter IN NUMBER, p_sArt IN VARCHAR2 )
IS
BEGIN
/**
* INIT
*/
Init();
OPEN curBearbeiterRead(p_nBearbeiter, p_sArt);
LOOP
FETCH curBearbeiterRead INTO recBearbeiterRead;
EXIT WHEN curBearbeiterRead%NOTFOUND;
/**
* Datensatz in globale Variablen einlesen
*/
g_nBearbeiter := recBearbeiterRead.bearbeiter;
g_sArt := recBearbeiterRead.art;
g_nZahl := recBearbeiterRead.zahl;
g_sText := recBearbeiterRead.text;
EXIT;
END LOOP;
IF curBearbeiterRead%FOUND THEN
g_nStatus := 1;
ELSE
g_nStatus := 0;
END IF;
CLOSE curBearbeiterRead;
END;
PROCEDURE Close
IS
BEGIN
IF curBearbeiterRead%ISOPEN THEN
CLOSE curBearbeiterRead;
END IF;
IF curBearbeiterSearch%ISOPEN THEN
CLOSE curBearbeiterSearch;
END IF;
END;
/**
* PRIVAT FUNCTION - nicht in Spezifikation
* Prüfen auf zwischenzeitliche Ãnderung (multiuser) und Sperren für UPDATE
*/
/**
* Status - Get - Variablen
*/
PROCEDURE GetnStatus (p_nStatus OUT NUMBER)
IS
BEGIN
p_nStatus := g_nStatus;
END;
PROCEDURE GetnErrorcode (p_error_code OUT NUMBER)
IS
BEGIN
p_error_code := error_code;
END;
PROCEDURE GetsErrormsg (p_error_msg OUT VARCHAR2)
IS
BEGIN
p_error_msg := error_msg;
END;
/**
* SET/GET Methoden
*/
PROCEDURE GetnBearbeiter ( p_nBearbeiter OUT NUMBER )
IS
BEGIN
p_nBearbeiter := g_nBearbeiter;
END;
PROCEDURE SetnBearbeiter ( p_nBearbeiter IN NUMBER )
IS
BEGIN
g_nBearbeiter := p_nBearbeiter;
END;
PROCEDURE GetsArt ( p_sArt OUT VARCHAR2 )
IS
BEGIN
p_sArt := g_sArt;
END;
PROCEDURE SetsArt ( p_sArt IN VARCHAR2 )
IS
BEGIN
g_sArt := p_sArt;
END;
PROCEDURE GetnZahl ( p_nZahl OUT NUMBER )
IS
BEGIN
p_nZahl := g_nZahl;
END;
PROCEDURE SetnZahl ( p_nZahl IN NUMBER )
IS
BEGIN
g_nZahl := p_nZahl;
END;
PROCEDURE GetsText ( p_sText OUT VARCHAR2 )
IS
BEGIN
p_sText := g_sText;
END;
PROCEDURE SetsText ( p_sText IN VARCHAR2 )
IS
BEGIN
g_sText := p_sText;
END;
/**
* wenn in Zahl ein Julianisches Datum hinterlegt ist,
* dieses im Format DD.MM.YYYY abholen/setzen
*/
PROCEDURE GetdtZahl ( p_dtZahl OUT VARCHAR2 )
IS
BEGIN
p_dtZahl := TO_CHAR(TO_DATE(g_nZahl,'J'),'DD.MM.YYYY');
END;
PROCEDURE SetdtZahl ( p_dtZahl IN VARCHAR2 )
IS
BEGIN
g_nZahl := TO_NUMBER(TO_CHAR(TO_DATE(p_dtZahl,'DD.MM.YYYY'),'J'));
END;
BEGIN
NULL;
EXCEPTION
WHEN others THEN
error_code := SQLCODE;
error_msg := SQLERRM;
END;
----[PL/SQL Package Body]----
------------------------------------------------------------------------
[2019-01-21 09:41:59] thomas dot wiedmann at laek-bw dot de
Third piece
----[PL/SQL Package]----
CREATE OR REPLACE PACKAGE tw_pkg_bearbeiter
AUTHID CURRENT_USER
IS
/**
* Hauptmethoden
*/
PROCEDURE Read (p_nBearbeiter IN NUMBER := NULL, p_sArt IN VARCHAR2 := NULL);
/**
* GET/SET
*/
PROCEDURE GetnBearbeiter ( p_nBearbeiter OUT NUMBER );
PROCEDURE SetnBearbeiter ( p_nBearbeiter IN NUMBER := NULL );
PROCEDURE GetsArt ( p_sArt OUT VARCHAR2 );
PROCEDURE SetsArt ( p_sArt IN VARCHAR2 := NULL );
PROCEDURE GetnZahl ( p_nZahl OUT NUMBER );
PROCEDURE SetnZahl ( p_nZahl IN NUMBER := NULL );
PROCEDURE GetsText ( p_sText OUT VARCHAR2 );
PROCEDURE SetsText ( p_sText IN VARCHAR2 := NULL );
PROCEDURE GetdtZahl ( p_dtZahl OUT VARCHAR2 );
PROCEDURE SetdtZahl ( p_dtZahl IN VARCHAR2 := NULL );
END;
----[PL/SQL Package]----
------------------------------------------------------------------------
[2019-01-21 09:40:34] thomas dot wiedmann at laek-bw dot de
Second piece
After the second stmt=null apache crashed
----[php PL/SQL call]---
$sQuery = '';
$sQuery = $sQuery . 'BEGIN ';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.Read(:df_nBearbeiter,:df_sArt); ';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetnBearbeiter(:df_nBearbeiter);';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetsArt(:df_sArt);';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetnZahl(:df_nZahl);';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetsText(:df_sText);';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetdtZahl(:df_dtZahl);';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetnStatus(:nStatus); ';
$sQuery = $sQuery . 'END; ';
$stmt = $dbh->prepare($sQuery);
if ($stmt) {
error_log('bearbeiter read() - prepared', 0);
$stmt->bindParam(':df_nBearbeiter', $df_nBearbeiter, PDO::PARAM_INT |
PDO::PARAM_INPUT_OUTPUT, 22 );
$stmt->bindParam(':df_sArt', $df_sArt, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 15 );
$stmt->bindParam(':df_nZahl', $df_nZahl, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 22
);
$stmt->bindParam(':df_sText', $df_sText, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 40
);
$stmt->bindParam(':df_dtZahl', $df_dtZahl, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT,
10 );
$stmt->bindParam(':nStatus', $nStatus, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 22 );
$stmt->execute();
error_log('bearbeiter read() - executed', 0);
$stmt->closeCursor();
error_log('bearbeiter read() - closeCursor', 0);
$stmt = null;
error_log('bearbeiter read() - stmt=null', 0);
if ($nStatus) {
// ok
} else {
// nicht gefunden @todo - Fehlermeldung?
}
}
----[php PL/SQL call]---
------------------------------------------------------------------------
[2019-01-21 09:38:43] thomas dot wiedmann at laek-bw dot de
I get the restart after doing the same PL/SQL more then two times. Logging same
"error_log" notes. It's look like this
-----[Process]---
read() - start
read() - prepared
read() - executed
read() - closeCursor
read() - stmt=null
read() - start
read() - prepared
read() - executed
read() - closeCursor
read() - stmt=null
zend_mm_heap corrupted
restarting
-----[Process]---
Sorry: get message: Your comment looks like SPAM by its content. Please consider rewording.
So I will send more then one feedback
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=77468
--
Edit this bug report at https://bugs.php.net/bug.php?id=77468&edit=1