在 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 中的错误?
你可以使用
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 块中,并将整个跟踪/异常发送到记录器,而不仅仅是消息。只需记住重新抛出异常,以便进一步正确处理它,而不是抑制它。