[英]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.