簡體   English   中英

定義一個常量函數調用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM