PHP: несколько команд в die/exit

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

  1. эхо nl2br($qVraagOp);
  2. mysql_error();

поэтому я подумал:

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

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

Мэтти


person matthy    schedule 22.02.2010    source источник
comment
Как насчет того, чтобы НЕ использовать die()? Пожалуйста, прочтите этот stackoverflow.com/questions/2130105/   -  person LiraNuna    schedule 22.02.2010
comment
Можете ли вы указать причину, по которой вы хотели бы использовать die?   -  person Anthony Forloney    schedule 22.02.2010
comment
это то, что они все говорят, затем вы видите следы or die() во всем производственном коде, и когда транзакция базы данных терпит неудачу... ТОГДА начинаются проблемы.   -  person LiraNuna    schedule 22.02.2010
comment
но это хороший способ проверить вещи, если они не работают. лучше самому во всём разобраться?   -  person matthy    schedule 22.02.2010


Ответы (5)


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

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));

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

person Dr.Optix    schedule 22.02.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 повсюду.

person Pascal MARTIN    schedule 22.02.2010

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

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

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

person Douwe Maan    schedule 22.02.2010

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

$rVraagOp = mysql_query( $qVraagOp ) or echo(nl2br($qVraagOp)) and die(mysql_error());
person vas3k    schedule 22.02.2010

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

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

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

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

person Vinko Vrsalovic    schedule 22.02.2010