PHP: несколько команд в die / exit - PullRequest
0 голосов
/ 22 февраля 2010

когда выдает ошибку, я хочу, чтобы он сделал 2 вещи.

  1. echo nl2br ($ qVraagOp);
  2. mysql_error ();

так что я думаю:

$rVraagOp = mysql_query( $qVraagOp ) or die( echo nl2br($qVraagOp); mysql_error(); );

Я могу написать функцию, которая выполняет эти две вещи, а затем вызвать ее, но это немного избыточно. есть ли другой способ?

Matthy

Ответы [ 5 ]

5 голосов
/ 22 февраля 2010

просто умереть с техническим сообщением об ошибке не очень полезно, по крайней мере, для ваших конечных пользователей; и вы должны создать свой сайт, имея в виду их.

Решение, которое, вероятно, более полезно для всех, было бы:

  • Записать сообщение о технической ошибке в файл, который вы иногда будете проверять
  • Показать конечному пользователю симпатичную страницу " упс, произошла ошибка ".


Тем не менее, если вам это действительно нужно, вы можете:

  • Объединить обе информации, чтобы иметь только одну строку
  • использовать блок if / else; что может сделать ваш код более легким для чтения.


Хорошим решением может быть использование исключений (полупсевдокод) :
Конечно, это с учетом того, что вы где-то определили MySQLException.

try {
    // Do some stuff

    if (!mysql_query(...)) {
        throw new MySQLException(mysql_error());
    }

    // Some other stuff
} catch (MySQLException $e) {
    // Deal with the MySQLException kind of Exception
    // i.e. deal my SQL errors
    // => Log to file
    //    + display a nice error page
} catch (Exception $e) {
    // At least, if something in the try block
    // might raise an Exception that's not a MySQLException
}

Одна приятная вещь в Exception - это то, что весь ваш код, который имеет дело с ошибками, находится в одном месте: die нигде в середине вашего кода

1 голос
/ 22 февраля 2010

Я бы написал такую ​​функцию:

function PrintDebug($DebugData)
{ 
  if($DebugMode == 1)
  { 
      return nl2br($DebugData) . "<br />" . mysql_error();
  }
  else
  {
      return "Ops stuff got messed up!!!";
  }
} 

И я бы использовал это как

$rVraagOp = mysql_query( $qVraagOp ) or die(PrintDebug($qVraagOp));

Ваша задача - сохранить состояние отладки в БД (возможно, режим обслуживания активен или нет), и регистрация в файл также будет полезна. Также хочу отметить, что я не проверял это.

0 голосов
/ 22 февраля 2010

Вы можете написать

$rVraagOp = mysql_query( $qVraagOp ) 
          or die( sprintf("%s%s%s", nl2br($qVraagop), PHP_EOL, mysql_error()) );

die () получает строку (или int) в качестве аргумента.

Убедитесь, что ваше умирающее сообщение хранится только в журнале и не выводится конечному пользователю, поскольку обычно оно бесполезно и даже опасно (раскрывает информацию о вашей конфигурации потенциальным злоумышленникам.)

0 голосов
/ 22 февраля 2010

Я не должен пробовать это на PHP, но это должно работать. Извините, если нет :)

$rVraagOp = mysql_query( $qVraagOp ) or echo(nl2br($qVraagOp)) and die(mysql_error());
0 голосов
/ 22 февраля 2010

То есть вы хотите показать nl2br($qVraagOp) и mysql_error()? Это было бы

or die(nl2br($qVraagop) . PHP_EOL . mysql_error())

(Использование константы PHP_EOL для перевода строки между nl2br($qVraagOp) и mysql_error())

...