我的代码是这样的:
<?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中做同样的事情
答案 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)
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();