Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义错误处理系统效率_Php_Error Handling_Mysqli - Fatal编程技术网

Php 自定义错误处理系统效率

Php 自定义错误处理系统效率,php,error-handling,mysqli,Php,Error Handling,Mysqli,为了在我的站点中建立一个好的错误处理系统,我花了好几天的时间 我的错误处理系统只关注意外错误,例如mysqli错误 我的站点运行许多mysqli查询,这意味着可能会发生错误 我的系统有三个部分,每一部分我都不确定它在最佳实践和效率中的位置 步骤1:捕捉错误 这是一种在准备好的语句中捕捉错误的好方法吗 在查询结束时查找错误不会在准备阶段捕获错误吗?或者,当准备阶段失败时,所有其他阶段都失败了(比如掉落的多米诺骨牌) 步骤2:记录错误 这是记录错误的合适方式吗?与打开文件的系统相比 步骤3:

为了在我的站点中建立一个好的错误处理系统,我花了好几天的时间

我的错误处理系统只关注意外错误,例如mysqli错误

我的站点运行许多mysqli查询,这意味着可能会发生错误

我的系统有三个部分,每一部分我都不确定它在最佳实践和效率中的位置

步骤1:捕捉错误

  • 这是一种在准备好的语句中捕捉错误的好方法吗

  • 在查询结束时查找错误不会在准备阶段捕获错误吗?或者,当准备阶段失败时,所有其他阶段都失败了(比如掉落的多米诺骨牌)

步骤2:记录错误

  • 这是记录错误的合适方式吗?与打开文件的系统相比
步骤3:处理事后数学

现在有一个错误,我需要决定如何前进,我的系统会退出脚本,进入一个标准错误页面,说“哎呀!出了问题”

  • 更改页眉是一个好方法吗?我知道页眉在什么时候可以使用它的局限性

是否有更好的方法处理错误,此系统适用于意外错误。预期的错误会得到处理,并以不同的方式显示给用户。

是的,您的怀疑是正确的-所有这三个步骤都是错误的

  • 首先,由于一些非常奇怪的原因,您没有记录错误消息本身。在没有错误消息的情况下,应该如何修复错误?像“无法处理查询…”这样的日志记录有什么用
  • 接下来,您必须检查每个操作的结果-因此,也必须检查prepare
  • 其次,如果不知道错误发生在哪里,就很难发现错误。一些调试回溯必须包含在错误消息中
  • 接下来,不应该有位置标题,而应该只有状态:500。所以,不要重定向到错误页面,只需包含它
  • 最后,上述所有任务都必须在一个地方执行,即在注册为
所以,场景必须是这样的

set_error_handler("myErrorHandler");
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    error_log("$errstr in $errfile:$errline");
    header('HTTP/1.1 500 Internal Server Error', TRUE, 500);
    readfile("500.html");
    exit;
}
$stmt = $mysqli->prepare("qwefq") or trigger_error($mysqli->error);
在引导文件中创建如下代码

set_error_handler("myErrorHandler");
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    error_log("$errstr in $errfile:$errline");
    header('HTTP/1.1 500 Internal Server Error', TRUE, 500);
    readfile("500.html");
    exit;
}
$stmt = $mysqli->prepare("qwefq") or trigger_error($mysqli->error);
然后,让您的mysqli代码如下

set_error_handler("myErrorHandler");
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    error_log("$errstr in $errfile:$errline");
    header('HTTP/1.1 500 Internal Server Error', TRUE, 500);
    readfile("500.html");
    exit;
}
$stmt = $mysqli->prepare("qwefq") or trigger_error($mysqli->error);

记录所有错误

您真的需要像$DatabaseHandlingHandlerUsedToHandLeadDatabase这样的变量名吗?您不能只使用$db或$mysqli吗?谢谢,当您调用函数error log时,它将错误放在哪里,是否将其放在默认错误日志文件中?你能创建自己的目的地吗?那么ajax请求呢,如何调用错误500,它只会在请求中调用错误,而不是在页面中调用错误,您会从ajax请求中查找错误并显示错误消息吗?错误日志目标由ini指令
error\u log
设置。如果未设置,则进入web服务器的错误日志。查看AJAX库文档-每个AJAX执行函数都有一个HTTP状态变量。您可以在JS中检查它,并相应地进行检查。查看jquery的statusCode示例好的,谢谢,帮助很大,我可以问什么是php引导文件吗,它只是您在每个页面上都需要的文件,是否可以要求它自动使用.htaccess,或者我必须手动要求它?是的,它是您在每个页面上都需要的文件。有一种方法可以通过php.ini/.htaccess实现,但我建议不要这样做