定义一个常量函数调用

时间:2012-03-29 12:20:57

标签: php constants

我的代码是这样的:

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

现在我想用mysql_error()替换“我的数据库错误”,以防我想调试它。什么是最简单的方法?

这似乎不起作用:define("ERROR", mysql_error());

----编辑---

我不想在生产环境下使用mysql_error(),它可能有助于攻击者找出与我的数据库相关的东西?这是我使用常量字符串

的观点

就像在 C 中一样 #define x yourfunction() 我不确定我是否可以在php中做同样的事情

4 个答案:

答案 0 :(得分:3)

简单的答案是“你做不到”。 常数的重点是常数,因为其值永远不会改变。如果它引用了函数调用,则该函数可以返回任何值 - 并且它不再是常量。

你可以做的一个技巧是将函数调用本身定义为常量的值 - 然后根据需要eval,如下所示:

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

然而,这真是一个相当糟糕的代码。

你会好多了
die(mysql_error());

答案 1 :(得分:1)

常数应该与名称的含义完全相同 - 常量。你不能重新声明常量,任何具有变量值的东西都应该存储在 - 你猜对了 - 一个变量

但是,你可以这样做:

<?php

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

  // ... 

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

?>

答案 2 :(得分:1)

必须在您尝试捕获的sql操作之后调用mysql_error()。您无法使用预先声明的常量或变量捕获此错误。你要么直接调用它,要么调用另一个调用它的函数,如下所示:

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

答案 3 :(得分:0)

您可以使用Stefan建议的内容并添加一个DEBUG常量,您可以在prod和dev环境之间切换:

define('DEBUG', 1);

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

if (DEBUG){
  echo mysql_error();   
}

die();