Grid 4 PHP SQL失败时避免空白页,仅不渲染异常网格的配置方法
解决方案:Grid 4 PHP SQL异常时保持页面正常加载
问题背景
Grid 4 PHP默认开启debug mode,会展示服务器端错误原因。但无论debug mode是否开启,SQL查询失败时整个页面都会变为空白页并抛出错误(debug开启时显示详细信息,关闭时显示通用提示)。需求是让页面正常加载,仅隐藏出现SQL问题的网格。
实现方案
可以通过通用PHP异常捕获结合Grid 4的错误配置来实现,具体如下:
1. 捕获网格渲染时的异常
Grid 4在SQL查询失败时会抛出异常,我们可以用try-catch包裹网格初始化和渲染的逻辑,只在无异常时输出网格:
<?php include_once("../../config.php"); include(PHPGRID_LIBPATH."inc/jqgrid_dist.php"); $table = ''; // 初始化网格变量 try { $db_conf = array( "type" => PHPGRID_DBTYPE, "server" => PHPGRID_DBHOST, "user" => PHPGRID_DBUSER, "password" => PHPGRID_DBPASS, "database" => PHPGRID_DBNAME ); $g = new jqgrid($db_conf); $opt["caption"] = "Customers"; // 关闭Grid自带的错误终止,改用自定义处理 $opt["debug"] = false; $g->set_options($opt); $g->table = "clients"; // 渲染网格,若SQL失败会抛出异常 $table = $g->render(); } catch (Exception $e) { // 记录错误日志便于排查 error_log("Grid SQL Error: " . $e->getMessage()); // 异常时可替换为友好提示,或直接留空不渲染网格 $table = '<div class="alert alert-warning">客户数据暂时无法加载,请稍后重试</div>'; } ?> <?php include ('header.php'); ?> <div class="row flex-nowrap"> <?php include('navigation.php'); ?> <!-- 其他页面内容 --> <div class="col"> <?php echo $table; ?> </div> </div> <?php include('footer.php'); ?>
2. 全局PHP错误抑制(可选)
如果Grid内部未抛出异常而是直接终止脚本,可以通过设置PHP的错误处理函数,避免脚本中断:
// 在脚本最顶部添加 set_error_handler(function($errno, $errstr, $errfile, $errline) { // 记录错误日志 error_log("PHP Error: $errstr in $errfile on line $errline"); // 返回true表示已处理错误,阻止脚本终止 return true; }); // 关闭错误输出到页面,仅记录到日志 ini_set('display_errors', 0); ini_set('log_errors', 1);
关键说明
- 关闭Grid的
debug模式可避免其直接输出错误并终止页面 try-catch能精准捕获网格渲染时的SQL异常,保证页面其他部分正常加载- 异常时可选择不输出网格,或显示友好提示,同时记录错误日志便于后续排查
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

