PHP MYSQL işlevine bir If / else hata / başarı mesajı ekleme

4 Cevap php

Im i başarı eklemek veya bu fonksiyonun sonunda dönmek için mesaj nasıl başarısız olabilir merak

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 başarı "Tamam" dönmek ve başarısızlık "FAIL" için gibi.

4 Cevap

Ne başarı olmak tanımlarsınız?

Eğer () başarılı olmak için doğru dönen mysql_query tanımlarsanız, o zaman şu çalışacaktır:

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";
}

Sen, bu lokalizasyon uygulamanın and esneklik açısından biraz korkutucu olası dönüş değerleri bir işlev içine "OK" ve "BAŞARISIZ" gibi değil sabit kod mesajlardır gerekir. Bir boolean dönmek ve bu fonksiyonun dışında mesajları ile uğraşmak gerekir.

Bu başka bir yerde uygulamanızda yalnızca iade mesajın aksine ne oldu semantik umurumda nerede olduğunu işlevini çağırarak eğer döndürülen dizeleri test etmek için biraz mantıklı. Ne 'FAIL!' Değiştirmeye karar verirseniz Örneğin 'Başarısız' olarak? Sen fonksiyonunun dönüşü dayanır tüm diğer kodunu değiştirmek zorunda sona erecek. Neden sadece böyle bir şey yapamaz:

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!';
}

Sonra başka bir yerde uygulama, size ihtiyacınız olmayacak:

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

ancak bunun yerine:

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

veya:

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

Yerine neden "OK" ve "BAŞARISIZ" Boole kullanmak değil mi?

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
}

Herkes başarı ya da başarısızlığını göstermek için, ileri sürdüğü gibi, gerçekten bir boolean kullanmalısınız. : Eğer really okunabilmesi için semantik şeker ekstra biraz, o zaman bazı sabitler tanımlamak olabilir isterseniz

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

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

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

Ama ben sadece size özellikle bu ekstra okunabilirliği ihtiyacı hissediyorum sadece bulunuyor, yinelemek gerekir. Bu yöntem, muhtemelen kod gelecekteki bakıcılarına söyleyebilirim yapacak "WhyTF o yaptın?"