我如何找出这个错误来自哪里?

问题描述 投票:0回答:1

在 Laravel 8 项目上工作时,我收到以下错误:

ERROR: SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type integer: "" CONTEXT:  unnamed portal parameter $1 = '' (SQL: select * from "[subjects]" where "[subjects]"."id" =  and "[subjects]"."deleted_at" is null limit 1) {"userId":297,"exception":"[object] (Illuminate\\Database\\QueryException(code: 22P02): SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type integer: \"\"\nCONTEXT:  unnamed portal parameter $1 = '' (SQL: select * from \"[subjects]\" where \"[subjects]\".\"id\" =  and \"[subjects]\".\"deleted_at\" is null limit 1) at /var/www/[dev_site]/vendor/laravel/framework/src/Illuminate/Database/Connection.php:712)\n[previous exception] [object] (PDOException(code: 22P02): SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type integer: \"\"\nCONTEXT:  unnamed portal parameter $1 = '' at /var/www/[dev_site]/vendor/laravel/framework/src/Illuminate/Database/Connection.php:373)

这显然是一个访问 [subjects] 所有模型值的查询,但由于传递的 id 未定义而失败。不幸的是,我不知道这是从哪里调用的。它是从多个地方调用的,因此错误会在多个页面中弹出,但我无法找到生成此错误的确切代码,该错误是由以下代码生成的:

/var/www/[dev_site]/vendor/laravel/framework/src/Illuminate/Database/Connection.php:373 

在日志中出现的某些地方,它似乎对代码的功能没有影响。在其他地方它会破坏代码。我一直在搜索代码但没有运气。有什么方法可以告诉哪些代码触发了 Connection.php 中的错误?

php sql laravel reporting
1个回答
0
投票

你可以使用

try {
    ... your code here
} catch (Exception $e) {
    var_dump($e->getTraceAsString());
}

它将列出导致您收到错误的所有方法调用。假设您有一个可以做很多事情的控制器,您可以将控制器的整个主体包装在 try-catch 块中,并且在其中执行的任何抛出错误的内容都将被捕获。

class MyController
{
    public function myAction()
    {
        try {
           // lots
           // lots
           // and lots
           // of things
        } catch (Exception $e) {
            var_dump($e->getTraceAsString());
        }
    }
}

如果您不知道此错误发生在哪里,您可以将数据库包装器/外观类中的方法包装在 try-catch 块中,并将整个跟踪/异常发送到记录器,而不仅仅是消息。只需记住重新抛出异常,以便进一步正确处理它,而不是抑制它。

© www.soinside.com 2019 - 2024. All rights reserved.