You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:15:55