English 中文(简体)
Mediawiki 扩展扩展错误处理
原标题:Mediawiki Extension error handling

如何处理 Mediawiki 扩展的错误条件?

我写了一个扩展名, 使用几个存储程序从 SQL 服务器表格中检索数据 。

在 DB 或服务器关闭之前, 所有操作都正常, 直至 DB 或服务器关闭, 此时Mssql_ connect 调用失败。 我尝试了多种处理方法 。 但每个处理方法要么出错500, 要么在空白页面上出现错误文本, 两者都阻止了 Wiki 页面的加载。 我希望它能够优雅地失败, 并允许 wiki 页面的其余部分正确加载 。

我知道我漏掉了一些明显的东西 有什么想法吗?

以下是我用来连接 DB 并将值返回到页面的代码 :

function RetrieveFromDatabase( $sproc, $spparam )
{
    $usr =  "usr";
    $pwd =  "pwd";
    $db =   "BGInfo";
    $host = "server";
    $output = "";

    // connect to database
  $con = mssql_connect ($host, $usr, $pwd);
  mssql_select_db($db);

  /* prepare the statement resource */
  $stmt=mssql_init($sproc, $con);

  if (isset($spparam))
  {
    mssql_bind($stmt,  @MachineName ,    $spparam,  SQLVARCHAR);
  }

  /* now execute the procedure */
  if ($result = mssql_execute($stmt))
  {
    return $result;
  }
  else
  {
    return NULL;
  }
}

function GetMachineTotalStorageInTBRender( $input, $args, $parser )
{
    $parser->disableCache();

    $output = "";

    $result = RetrieveFromDatabase("TotalDriveSpaceByMachine", $input);
  if ($result)
  {
    while($row = mssql_fetch_array($result))
    {
      // Assign Variables
      $TotalTB = $row["TB"];
      if(!is_null($TotalTB))
      {
        // Print Variables in Table
        $output = $TotalTB." TB";
      }
    } // End While Loop
  } // End If

    return $output;
}
最佳回答

感谢 MaxSem 和 Samuel Lampa 的帮助。 答案(至少对我来说)是将连接到数据库部分的连接包装在一次尝试抓捕中, 这使连接得以尝试, 当它未能顺利退出时, 它可能应该向用户和/或日志报告错误, 但是这只适合我的家用, 这样它就没什么大不了了 。

function RetrieveFromDatabase( $sproc, $spparam )
{
    $usr =  "usr";
    $pwd =  "pwd";
    $db =   "BGInfo";
    $host = "server";
    $output = "";

  try
  {
    // connect to database
    $con = mssql_connect ($host, $usr, $pwd);
  }
  catch(ExprError $e)
  {
      return NULL;
  }

  if (!$con)
  {
      return;
  }

  try
  {
    mssql_select_db($db);
  }
  catch(ExprError $e)
  {
      return NULL;
  }

  /* prepare the statement resource */
  $stmt=mssql_init($sproc, $con);

  if (isset($spparam))
  {
    mssql_bind($stmt,  @MachineName ,    $spparam,  SQLVARCHAR);
  }

  /* now execute the procedure */
  if ($result = mssql_execute($stmt))
  {
    return $result;
  }
  else
  {
    return NULL;
  }
}

function GetMachineTotalStorageInTBRender( $input, $args, $parser )
{
    $parser->disableCache();

    $output = "";

    $result = RetrieveFromDatabase("TotalDriveSpaceByMachine", $input);
  if ($result)
  {
    while($row = mssql_fetch_array($result))
    {
      // Assign Variables
      $TotalTB = $row["TB"];
      if(!is_null($TotalTB))
      {
        // Print Variables in Table
        $output = $TotalTB." TB";
      }
    } // End While Loop
  } // End If

    return $output;
}
问题回答

首先,绕过 Mysql_ connect () 调用错误抑制, 像这样 :

wfSuppressWarnings();
$con = mssql_connect ($host, $usr, $pwd);
wfRestoreWarnings();

第二,检查$Con 并提前保释 以防止致命。





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签