[英]Define a constant function call
我的代码是这样的:
<?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中做同样的事情
简单的答案是“你不能那样做”。 常量的全部要点是它的常量不变,因为它的值永远不会改变 。 如果它引用一个函数调用,则该函数可以返回任何值-而且它不再是常量。
您可以做的一招是将函数调用本身定义为常量的值-然后按需eval
它,如下所示:
define("ERROR", "return mysql_error()");
...
die(eval(ERROR));
但是,这确实是一个非常糟糕的代码。 你会做得更好
die(mysql_error());
常数应恰如其名所隐含- 常数 。 您不能重新声明常数,任何具有变量值的东西都应该存储在(您猜中了) 变量 。
但是,您可以执行以下操作:
<?php
define("ERROR", "SOMETHING WRONG WITH MY DATABASE: ");
// ...
if (!mysql_query($q)){
die(ERROR . mysql_error());
}
?>
在尝试捕获的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());
您可以使用类似于Stefan建议的内容,并添加一个DEBUG常量,您可以在prod和dev环境之间进行切换:
define('DEBUG', 1);
// In the function:
// ...
echo ERROR;
if (DEBUG){
echo mysql_error();
}
die();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.