Определить постоянный вызов функции - PullRequest
0 голосов
/ 29 марта 2012

Мой код такой:

<?php
define("ERROR", "SOMETHING WRONG WITH MY DATABASE");
... 
if (!mysql_query($q)){
  die(ERROR);
}
?>

Теперь я хочу заменить «ЧТО-ТО НЕПРАВИЛЬНО С МОЕЙ БАЗОЙ БАЗЫ» на mysql_error() на случай, если я захочу его отладить.какой самый простой способ?

Это не похоже на работу: define("ERROR", mysql_error());

---- edit ---

Я не хочу использоватьmysql_error () в производственной среде может помочь злоумышленнику выяснить, что связано с моей базой данных?Это моя точка зрения использования постоянной строки

, как в C , которую вы можете сделать #define x yourfunction() Я не уверен, что смогу сделать то же самое в php

Ответы [ 4 ]

3 голосов
/ 29 марта 2012

Простой ответ: «Вы не можете этого сделать». Весь смысл константы в том, что это константа , как в , его значение никогда не изменяется . Если это относится к вызову функции, функция может вернуть любое значение - и оно больше не является постоянным.

Один трюк, который вы можете сделать, это определить сам вызов функции как значение константы, а затем eval по требованию, что-то вроде этого:

define("ERROR", "return mysql_error()");
...
die(eval(ERROR));

Однако это действительно довольно плохой код. Тебе было бы намного лучше заняться

die(mysql_error());
1 голос
/ 29 марта 2012

mysql_error () должен вызываться ПОСЛЕ операции sql, которую вы пытаетесь перехватить. Вы не можете отловить эту ошибку с помощью предварительно объявленной константы или переменной. Вы должны либо вызвать его напрямую, либо вызвать другую функцию, которая вызывает его, например:

die(mysql_error());

или

define("ERROR", "Database Problem ");

function Err() {
  $sql_err = ERROR . mysql_error();
  return $sql_err;
}
// sql operation here, then test for error
die(Err());
1 голос
/ 29 марта 2012

Константа должна быть именно тем, что подразумевает название - константа . Вы не можете повторно объявить константу, и все, что имеет значение переменной , должно храниться в - как вы уже догадались - переменной .

Однако вы можете сделать что-то вроде этого:

<?php

  define("ERROR", "SOMETHING WRONG WITH MY DATABASE: ");

  // ... 

  if (!mysql_query($q)){
    die(ERROR . mysql_error());
  }

?>
0 голосов
/ 29 марта 2012

Вы можете использовать что-то вроде предложенного Стефаном и добавить константу DEBUG, которую вы можете переключать между средой prod и dev:

define('DEBUG', 1);

// In the function:
// ...
echo ERROR;

if (DEBUG){
  echo mysql_error();   
}

die();
...