定义一个常数函数调用
我的代码是这样的:定义一个常数函数调用
<?php
define("ERROR", "SOMETHING WRONG WITH MY DATABASE");
...
if (!mysql_query($q)){
die(ERROR);
}
?>
现在我要替换“一些与我的数据库错”的情况下,与mysql_error()
我要调试。最简单的方法是什么?
这似乎不是工作的工作:define("ERROR", mysql_error());
----编辑---
我不想使用生产环境下mysql_error(),它可以帮助攻击者弄不清与我的数据库有关的东西?这是我使用一个常量字符串
在ç的点,你可以做 #define x yourfunction()
我不知道我是否可以做同样的PHP
简单的答案是:“你不能这样做” 。整点常数是它的常数在其值从未改变。如果它指向一个函数调用,该函数可以返回任何值 - 并且它不再是常量。
一个窍门,你可以做的就是定义函数调用本身是常量的值 - 然后eval
它的需求,这样的事情:
define("ERROR", "return mysql_error()");
...
die(eval(ERROR));
然而,这的确是一个相当糟糕的代码。你会好得多做
die(mysql_error());
你可怕的,可怕的'eval()'将要求常量被定义为'return mysql_error();'或者它不会输出任何东西。但为什么人们会这样做超出了我的想象。 – DaveRandom 2012-03-29 12:25:29
或者按照@DaveRandom的建议,将静态字符串添加到错误消息中。 – 2012-03-29 12:25:33
是mysql_error()在生产环境中不安全?我不想显示mysql错误,所以攻击者可以从中得到一些东西......这是我使用常量字符串的要点。 – w00d 2012-03-29 12:25:35
常量应该是正是顾名思义 - 不变。你不能重新声明一个常量,并且任何具有变量值的变量都应该存储在 - 你猜对了 - 一个变量。
但是,你可以做这样的事情:
<?php
define("ERROR", "SOMETHING WRONG WITH MY DATABASE: ");
// ...
if (!mysql_query($q)){
die(ERROR . mysql_error());
}
?>
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());
您可以使用像斯特凡建议,并添加一个DEBUG常数,你可以在产品和开发环境之间切换:
define('DEBUG', 1);
// In the function:
// ...
echo ERROR;
if (DEBUG){
echo mysql_error();
}
die();
刚使用函数时出了什么问题? – JJJ 2012-03-29 12:22:58
@Juhana我加了我的解释.. – w00d 2012-03-29 12:29:04
'function my_error(){return mysql_error()}' - 当你活着用一个字符串替换mysql_error()'。无论如何,没有理由尝试使函数“不变”。 – JJJ 2012-03-29 12:30:21