2009-09-06 60 views
1

我想知道我怎麼可以添加一個成功或失敗的消息,在此功能添加一個if/else語句錯誤/成功的消息PHP MYSQL功能

function InsertIntoDB($field1, $field2, $field3, $field4, $field5, $field6, $field7, $field8, $field9){ 
$sql = "INSERT INTO `caches` (`url` , `username` , `password` , `cachename` , `lat` , `long` , `message` , `notes` , `tags` ) VALUES( '{$field1}' , '{$field2}' , '{$field3}' , '{$field4}' , '{$field5}' , '{$field6}' , '{$field7}' , '{$field8}' , '{$field9}' ) "; 
mysql_query($sql) or die(mysql_error()); 
} 

ID的末端返回喜歡它返回「OK」成功,失敗則爲「失敗」。

+2

爲什麼不成功/失敗返回true/false?返回字符串意味着你將在你的代碼中散佈'=='OK''。 – DisgruntledGoat 2009-09-07 00:23:32

回答

0

你認爲什麼是成功?

如果你定義的mysql_query()返回true是成功的,那麼下面的工作:

function InsertIntoDB($field1, $field2, $field3, $field4, $field5, $field6, $field7, $field8, $field9){ 
    $sql = "INSERT INTO `caches` (`url` , `username` , `password` , `cachename` , `lat` , `long` , `message` , `notes` , `tags` ) VALUES( '{$field1}' , '{$field2}' , '{$field3}' , '{$field4}' , '{$field5}' , '{$field6}' , '{$field7}' , '{$field8}' , '{$field9}' ) "; 
    return mysql_query($sql) ? "OK" : "FAIL"; 
} 
+0

爲什麼這麼多倒票? – carl 2009-09-07 02:41:05

+0

閱讀其他答案 - 雖然這正是問題所要求的,但返回一個字符串並不是一個好習慣。 – nickf 2009-09-07 05:15:36

0
function InsertIntoDB($field1, $field2, $field3, $field4, $field5, $field6, $field7, $field8, $field9){ 
$sql = "INSERT INTO `caches` (`url` , `username` , `password` , `cachename` , `lat` , `long` , `message` , `notes` , `tags` ) VALUES( '{$field1}' , '{$field2}' , '{$field3}' , '{$field4}' , '{$field5}' , '{$field6}' , '{$field7}' , '{$field8}' , '{$field9}' ) "; 
$result = mysql_query($sql); 
if($result) return "OK"; 
else return "FAIL"; 
} 
3

你不應該硬編碼的消息,如「OK」和「故障」變成功能它的可能返回值,這在本地化方面有點可怕您的應用程序的靈活性。您應該返回一個布爾值並處理該函數之外的消息。

如果您從應用程序中的其他位置調用該函數,那麼您只關心與返回的消息相反的事件的語義,那麼測試返回的字符串就沒什麼意義。如果你決定改變'失敗'會怎麼樣?以'不成功'爲例?您最終必須更改依賴於函數返回的所有其他代碼。爲什麼不只是做這樣的事情:

function InsertIntoDB($field1, $field2, $field3, $field4, $field5, $field6, $field7, $field8, $field9){ 
    $sql = "INSERT INTO `caches` (`url` , `username` , `password` , `cachename` , `lat` , `long` , `message` , `notes` , `tags` ) VALUES( '{$field1}' , '{$field2}' , '{$field3}' , '{$field4}' , '{$field5}' , '{$field6}' , '{$field7}' , '{$field8}' , '{$field9}' ) "; 
    return mysql_query($sql); 
} 

if(InsertIntoDB(...)) { 
    echo 'Success!'; 
} else { 
    echo 'Fail!'; 
} 

然後別的地方在你的應用程序,你會不會需要:

if(InsertIntoDB(...) == 'SUCCESS!') { 
    ... 
} 

而是:

if(InsertIntoDB(...)) { 
    ... 
} 

或:

if(!InsertIntoDB(...)) { 
    ... 
} 
0

爲什麼不使用布爾值而是「OK」和「FAIL」?

function InsertIntoDB($field1, $field2, $field3, $field4, $field5, $field6, $field7, $field8, $field9){ 
    $sql = "INSERT INTO `caches` (`url` , `username` , `password` , `cachename` , `lat` , `long` , `message` , `notes` , `tags` ) VALUES( '{$field1}' , '{$field2}' , '{$field3}' , '{$field4}' , '{$field5}' , '{$field6}' , '{$field7}' , '{$field8}' , '{$field9}' ) "; 
    return mysql_query($sql); 
} 

if(InsertIntoDB(....)){ 
    // succeeded 
}else{ 
    // failed 
} 
0

正如其他人所建議的,爲了表明成功或失敗,您應該使用布爾值。如果你真的這對可讀性語義糖額外位,那麼你可以定義一些常量:

define('OK', true); 
define('FAIL', false); 

function insertIntoDB() { 
    $sql = "..."; 
    return mysql_query($sql) ? OK : FAIL; 
} 

if (insertIntoDB() == OK) { 
    // win! 
} 

但我想重申,這只是如果你特別覺得你需要這個額外的可讀性。這種方法可能會使你的代碼的未來維護者說「WhyTF他做到了嗎?」

+0

我敢打賭,當人們閱讀我的遺留代碼時,他們會說很多。 – alex 2009-09-07 02:02:06

+1

heck,* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * – nickf 2009-09-07 05:14:42