最后一次插入的ID导致500错误PHP

最后一次插入的ID导致500错误PHP,php,ajax,doctrine-orm,http-status-code-500,Php,Ajax,Doctrine Orm,Http Status Code 500,我在PHP上有一个web模块,我们刚刚从5.3迁移到PHP7.2。我们也开始使用条令,一切正常。突然,web模块开始显示随机的500个错误。即使是在同样的动作上也不行。我仍然不知道为什么,但是每次使用doctrine的函数lastInsertId时,我都能设法触发它。每次经过该函数时,它都会抛出一个通用的500错误(即使我在php.ini上激活了错误,我也不会得到关于错误的任何详细信息) Ajax调用: function listaCandidatos() { $('#' + GLOBA

我在PHP上有一个web模块,我们刚刚从5.3迁移到PHP7.2。我们也开始使用条令,一切正常。突然,web模块开始显示随机的500个错误。即使是在同样的动作上也不行。我仍然不知道为什么,但是每次使用doctrine的函数lastInsertId时,我都能设法触发它。每次经过该函数时,它都会抛出一个通用的500错误(即使我在php.ini上激活了错误,我也不会得到关于错误的任何详细信息)

Ajax调用:

function listaCandidatos() {
    $('#' + GLOBAL_ID).find('#candidates-button').click(function () {
        var btn = this,
            url = BASE_URL + 'actualizacion-candidatos.php',
            numInv = $('#' + GLOBAL_ID).find('#num_inventario').val();

        $(btn).attr('disabled', 'disabled');

        $.post(url, {numInv: numInv}, function (response) {
            if (response.success) {
                enableScannerForm();
                $('#' + GLOBAL_ID).find('#master_id').val(response.masterId);
                $('#' + GLOBAL_ID).find('#last_master_id').val(response.masterId);
                loadListScanner();
            } else {
                alert(response.message);
                $(btn).removeAttr('disabled');
            }
        }, 'json');
    });
}
   public function candidatos()
    {
        ILogger::info('ACTUALIZACION DE INVENTARIO OBTENER CANDIDATOS (INICIO)');
        $result = array('success' => true, 'message' => '');

        if (!Request::isAjax()) {
            $result['success'] = false;
            $result['message'] = 'No ajax request';
        } else {
            $pa_idpais = $_SESSION['pa_idpais'];
            $estacion = $_SESSION['estacion'];
            $modulo = $_SESSION['modulo'];
            $login = $_SESSION['login'];
            $mModel = new InventarioMaster();
            $dModel = new InventarioDetalle();
            $tModel = new InventarioDetalleTemp();
            $hModel = new InventarioHistorial();

            ILogger::info('EJECUCION DE QUERY OBTENER CANDIDATOS (INICIO)');
            $candidates = $dModel->getCandidates();
            ILogger::info('EJECUCION DE QUERY OBTENER CANDIDATOS (FIN)');

            $result['masterId'] = 0;

            if (count($candidates) > 0) {
                IDBConnection::getInstance()->beginTransaction();

                try {
                    $dataMaster = array(
                        'num_folio' => time(),
                        'id_courier' => 0,
                        'pa_idpais' => $pa_idpais,
                        'est_idestacion' => $estacion,
                        'mod_idmodulo' => $modulo,
                        'usu_login' => $login,
                        'inv_fecha_ingreso' => "CONVERT(datetime, DATEADD(hh, " . $_SESSION['pa_zona'] . ", GETUTCDATE()), 103)",
                        'inv_tipo' => 'ACT'
                    );

                    ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_MASTER (INICIO)');
                    **$masterId = $mModel->register($dataMaster);**
                    ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_MASTER (FIN)');

                    $tmpData = array(
                        'id_inv_master' => $masterId,
                        'id_inv_detalle' => '',
                        'gui_idguia' => '',
                        'pid' => null,
                        'inv_actual_checkpoint' => 'CC',
                        'temp_fecha_actual_registro' => "CONVERT(datetime, DATEADD(hh, " . $_SESSION['pa_zona'] . ", GETUTCDATE()), 103)",
                        'inv_status' => 'SE'
                    );

                    foreach ($candidates as $item) {
                        $tmpData['id_inv_detalle'] = $item['id_inv_detalle'];
                        $tmpData['gui_idguia'] = $item['gui_idguia'];
                        $tmpData['pid'] = $item['pid'];

                        if ($item['inv_checkpoint'] == 'SA') {
                            $tmpData['inv_actual_checkpoint'] = $item['inv_checkpoint'];
                        }

                        if ($item['det_tipo_ingreso'] == 'COU' && in_array($item['inv_status'], array('IN', 'AC'))) {
                            $tmpData['inv_actual_checkpoint'] = 'CC';
                        }

                        ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_DETALLE_TEMP (INICIO)');
                        $tModel->register($tmpData);
                        ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_DETALLE_TEMP (FIN)');

                        $dataHistory = array(
                            'id_inv_master' => $masterId,
                            'id_inv_detalle' => $item['id_inv_detalle'],
                            'his_checkpoint' => $item['inv_checkpoint'],
                            'his_checkpoint_candidato' => $item['inv_checkpoint'],
                            'his_fecha_registro' => $tmpData['temp_fecha_actual_registro'],
                            'his_comentario' => 'Sin escanear',
                            'usu_login' => $login,
                            'inv_status' => 'SE',
                            'his_evento' => 'ACT'
                        );

                        ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_HISTORIAL (INICIO)');
                        $hModel->register($dataHistory);
                        ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_HISTORIAL (FIN)');
                    }

                    IDBConnection::getInstance()->commitTransaction();
                    $result['masterId'] = $masterId;

                    $queueData = array(
                        'detalleIds' => '',
                        'lastGuia' => '',
                        'lastId' => '',
                        'lastMasterId' => $masterId,
                        'lastNumInv' => '0',
                        'lastRequestType' => '',
                        'lastRequestValue' => '',
                        'masterId' => $masterId,
                        'fromMasterId' => '',
                        'numInv' => '',
                        'numPiezas' => ''
                    );

                    ScannerData::setId('inventarios_scanner_actualizacion');
                    ScannerData::saveData($queueData);
                } catch (Exception $ex) {
                    IDBConnection::getInstance()->rollbackTransaction();
                    $result['success'] = false;
                    $result['message'] = utf8_encode($ex->getMessage());
                    $result['masterId'] = null;
                }
            }
        }

        ILogger::info('ACTUALIZACION DE INVENTARIO OBTENER CANDIDATOS (FIN)');
        echo json_encode($result);
        return;
    }
PHP操作:

function listaCandidatos() {
    $('#' + GLOBAL_ID).find('#candidates-button').click(function () {
        var btn = this,
            url = BASE_URL + 'actualizacion-candidatos.php',
            numInv = $('#' + GLOBAL_ID).find('#num_inventario').val();

        $(btn).attr('disabled', 'disabled');

        $.post(url, {numInv: numInv}, function (response) {
            if (response.success) {
                enableScannerForm();
                $('#' + GLOBAL_ID).find('#master_id').val(response.masterId);
                $('#' + GLOBAL_ID).find('#last_master_id').val(response.masterId);
                loadListScanner();
            } else {
                alert(response.message);
                $(btn).removeAttr('disabled');
            }
        }, 'json');
    });
}
   public function candidatos()
    {
        ILogger::info('ACTUALIZACION DE INVENTARIO OBTENER CANDIDATOS (INICIO)');
        $result = array('success' => true, 'message' => '');

        if (!Request::isAjax()) {
            $result['success'] = false;
            $result['message'] = 'No ajax request';
        } else {
            $pa_idpais = $_SESSION['pa_idpais'];
            $estacion = $_SESSION['estacion'];
            $modulo = $_SESSION['modulo'];
            $login = $_SESSION['login'];
            $mModel = new InventarioMaster();
            $dModel = new InventarioDetalle();
            $tModel = new InventarioDetalleTemp();
            $hModel = new InventarioHistorial();

            ILogger::info('EJECUCION DE QUERY OBTENER CANDIDATOS (INICIO)');
            $candidates = $dModel->getCandidates();
            ILogger::info('EJECUCION DE QUERY OBTENER CANDIDATOS (FIN)');

            $result['masterId'] = 0;

            if (count($candidates) > 0) {
                IDBConnection::getInstance()->beginTransaction();

                try {
                    $dataMaster = array(
                        'num_folio' => time(),
                        'id_courier' => 0,
                        'pa_idpais' => $pa_idpais,
                        'est_idestacion' => $estacion,
                        'mod_idmodulo' => $modulo,
                        'usu_login' => $login,
                        'inv_fecha_ingreso' => "CONVERT(datetime, DATEADD(hh, " . $_SESSION['pa_zona'] . ", GETUTCDATE()), 103)",
                        'inv_tipo' => 'ACT'
                    );

                    ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_MASTER (INICIO)');
                    **$masterId = $mModel->register($dataMaster);**
                    ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_MASTER (FIN)');

                    $tmpData = array(
                        'id_inv_master' => $masterId,
                        'id_inv_detalle' => '',
                        'gui_idguia' => '',
                        'pid' => null,
                        'inv_actual_checkpoint' => 'CC',
                        'temp_fecha_actual_registro' => "CONVERT(datetime, DATEADD(hh, " . $_SESSION['pa_zona'] . ", GETUTCDATE()), 103)",
                        'inv_status' => 'SE'
                    );

                    foreach ($candidates as $item) {
                        $tmpData['id_inv_detalle'] = $item['id_inv_detalle'];
                        $tmpData['gui_idguia'] = $item['gui_idguia'];
                        $tmpData['pid'] = $item['pid'];

                        if ($item['inv_checkpoint'] == 'SA') {
                            $tmpData['inv_actual_checkpoint'] = $item['inv_checkpoint'];
                        }

                        if ($item['det_tipo_ingreso'] == 'COU' && in_array($item['inv_status'], array('IN', 'AC'))) {
                            $tmpData['inv_actual_checkpoint'] = 'CC';
                        }

                        ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_DETALLE_TEMP (INICIO)');
                        $tModel->register($tmpData);
                        ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_DETALLE_TEMP (FIN)');

                        $dataHistory = array(
                            'id_inv_master' => $masterId,
                            'id_inv_detalle' => $item['id_inv_detalle'],
                            'his_checkpoint' => $item['inv_checkpoint'],
                            'his_checkpoint_candidato' => $item['inv_checkpoint'],
                            'his_fecha_registro' => $tmpData['temp_fecha_actual_registro'],
                            'his_comentario' => 'Sin escanear',
                            'usu_login' => $login,
                            'inv_status' => 'SE',
                            'his_evento' => 'ACT'
                        );

                        ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_HISTORIAL (INICIO)');
                        $hModel->register($dataHistory);
                        ILogger::info('EJECUCION DE QUERY REGISTRAR INVENTARIO_HISTORIAL (FIN)');
                    }

                    IDBConnection::getInstance()->commitTransaction();
                    $result['masterId'] = $masterId;

                    $queueData = array(
                        'detalleIds' => '',
                        'lastGuia' => '',
                        'lastId' => '',
                        'lastMasterId' => $masterId,
                        'lastNumInv' => '0',
                        'lastRequestType' => '',
                        'lastRequestValue' => '',
                        'masterId' => $masterId,
                        'fromMasterId' => '',
                        'numInv' => '',
                        'numPiezas' => ''
                    );

                    ScannerData::setId('inventarios_scanner_actualizacion');
                    ScannerData::saveData($queueData);
                } catch (Exception $ex) {
                    IDBConnection::getInstance()->rollbackTransaction();
                    $result['success'] = false;
                    $result['message'] = utf8_encode($ex->getMessage());
                    $result['masterId'] = null;
                }
            }
        }

        ILogger::info('ACTUALIZACION DE INVENTARIO OBTENER CANDIDATOS (FIN)');
        echo json_encode($result);
        return;
    }
寄存器函数中出现错误:

$masterId = $mModel->register($dataMaster);
这是哪一个:

public function register($data = array())
{
    $sql = "
        INSERT INTO 
            inventario_master
            (
                num_folio, 
                id_courier, 
                pa_idpais, 
                est_idestacion, 
                mod_idmodulo, 
                usu_login, 
                inv_fecha_ingreso, 
                inv_tipo
            ) 
        VALUES 
            (
                '" . $data['num_folio'] . "', 
                '" . $data['id_courier'] . "', 
                '" . $data['pa_idpais'] . "', 
                '" . $data['est_idestacion'] . "', 
                '" . $data['mod_idmodulo'] . "', 
                '" . $data['usu_login'] . "', 
                " . $data['inv_fecha_ingreso'] . ", 
                '" . $data['inv_tipo'] . "'
            )
    ";

    $this->db->executeQuery($sql);
   return $this->db->lastInsertId();
}
lastInsertId只调用了同名的doctrine函数

我已尝试捕获错误,但未能捕获。register函数实际上发生了,我确实使用该函数获取ID,但是ajax调用每次都返回错误。我试图从ajax读取错误消息,但它是空的。这也适用于我的本地机器IIS。这可能与服务器配置有关,但我不确定

引发错误的服务器是Windows server 2016版本1607,IIS版本为10.0.14393.0,我们正在使用Microsoft SQL server 2016作为数据库


提前感谢。

错误500也可能导致文件激增。查证
您可以尝试返回的不是lastInsertId,而是随机数-错误持续存在?

日志显示了什么?在PHP错误日志中启用错误报告。IIS日志中也没有任何内容。我正在使用E_ALL,我们正在跟踪所有错误,因为我们仍在开发中,但是这个错误似乎没有显示出来。那么$this->db是一个原则DBAL连接对象吗?我知道这是离题的,但您的注册代码非常可怕,似乎对sql注入开放。也许试着转移到准备好的语句,就像一个完全随机的猜测。我想您还可以检查executeQuery是否返回语句对象。