2013-02-11 2 views
1

Мне нужно знать, была ли функция, которую я только что выполнял, не была успешной. Ниже приведена соответствующая функция и ее выполнение.Если функция X не была успешной, выполните Y

Я знаю, как я могу это сделать, установив переменную из функции и проверив, существует ли она, но не уверен, что это лучшая практика.

//Update users function 
function update($db, $fn, $ln, $email, $offers, $vlue, $responce) 
{ 
    $stmt = $db->prepare("insert into kkt (fName_765, lName_765, email_765, signup_765, kkt_resp_765, stamp_765) values (:fname, :lname, :email, :signup, NOW())"); 

    $parameters = array(
     ':fname' => $fn, 
     ':lname' => $ln, 
     ':email' => $email, 
     ':signup' => $offers); 

    $stmt->execute($parameters); 
    print $db->lastInsertId(); //show ID 
    return true; 
} 


//Test Attributes 
$fn = 'test'; 
$ln = 'test'; 
$email = '[email protected],com'; 
$offers = '1'; 

try { 
    update($db, $fn, $ln, $email, $offers); 
} 
catch (PDOException $e) { 
    echo "no update there is a slight problem " . $e->getMessage(); 
} 

Я буду использовать попытку поймать уведомить меня по электронной почте, если он не был успешным, но я должен поставить код, который я собираюсь показать пользователь здесь или это лучше, чтобы написать что-то еще, чтобы сохранить его аккуратнее?

Спасибо за все ваши комментарии - окончательный код теперь более чем на CR: https://codereview.stackexchange.com/questions/21481/pdo-connection-prep-and-execute-in-there-own-functions

+1

делает эту работу, и вы только после того, как лучший совет практика ? Try-catch - хороший способ сделать это, хотя, поскольку он стоит, вам не нужно возвращать true, поскольку вы его не используете. Если 'update()' используется в разных местах, я бы склонен помещать try/catch внутри функции и возвращать 'true', если все было в порядке, и строковое сообщение, если была проблема. Затем вы можете выполнить 'if ($ result! == true)', чтобы проверить, произошла ли ошибка. – halfer

+0

см. Ниже о том, чтобы рекомендовать поставить это не в функцию, но, читая это, имеет смысл вернуть это обратно в функцию. спасибо – odd

ответ

3

В PHP вы можете справиться с ней тремя различными способами, и все они будут рассматриваться хорошо, потому что сам PHP использовать все они (что действительно путает, как кажется). Вы можете вернуть ложна на ошибку (и дело с обратным результатом):

function update($db, $fn, $ln, $email, $offers, $vlue, $responce) { 
    try { 
     ... 
    } catch (PDOException $e) { 
     return false; 
    } 
} 

Вы могли бы вызвать ошибку (и уведомить себя по электронной почте в обработчик ошибок):

function update($db, $fn, $ln, $email, $offers, $vlue, $responce) { 
    try { 
     ... 
    } catch (PDOException $e) { 
     trigger_error("...", E_USER_WARNING); 
    } 
} 

или вы могли бы бросить ваше собственное исключение (и отправьте электронное письмо при его улавливании):

function update($db, $fn, $ln, $email, $offers, $vlue, $responce) { 
    try { 
     ... 
    } catch (PDOException $e) { 
     throw new Exception("..."); 
    } 
} 

Это не имеет значения. Но то, что, как правило, предлагается в том, что:

  • использовать исключения, когда вы управляете каким-то образом восстановить ошибку или если это ошибка, которая не должна останавливать всю программу
  • вы используете возвращаемые значения BOOL только при они действительно необходимы (для is_* типа функций), а не на наличие ошибок
  • вы используете trigger_error, когда вы хотите, чтобы остановить выполнение всей программы
+0

благодарю вас, я могу просто добавить это обратно в функцию, помочь appricated – odd

+0

это помогло мне много спасибо, обновлено на CR – odd

1

Вы можете использовать if(function()), чтобы проверить, если функция была выполнена успешно или нет. он возвращает флаг Boolean в true или false.

if(update("test","test","[email protected],com",1)) 
{ 
    //successful 
} 
else 
{ 
    //callfunction2() 
} 
1

я думаю, что вы можете использовать примерочный улов в функции:

function update($db, $fn, $ln, $email, $offers, $vlue, $responce) 
{ 
    $stmt = $db->prepare("insert into kkt (fName_765, lName_765, email_765, signup_765, kkt_resp_765, stamp_765) values (:fname, :lname, :email, :signup, NOW())"); 

    $parameters = array(
     ':fname' => $fn, 
     ':lname' => $ln, 
     ':email' => $email, 
     ':signup' => $offers); 

    try { 
     $stmt->execute($parameters); 
     print $db->lastInsertId(); //show ID 
     return true; 
    } catch(Exception $ex) { 
     //log, or pirint error message 
     //or return 0 
     return false; 
    } 

} 
+0

У меня была попытка и уловка в функции, и мне было рекомендовано, чтобы было лучше, если бы это было из функции. http://codereview.stackexchange.com/questions/21481/pdo-connection-prep-and-execute-in-there-own-functions – odd

1
try { 
    $result=update($db, $fn, $ln, $email, $offers); 
    if(!$result) 
     throw new Exception("Query not succesful!"); 
} 
catch (PDOException $e) { 
    mail("what","ever","you","want"); 
    echo "no update there is a slight problem " . $e->getMessage(); 
} 
+0

, добавив его в переменную, мне кажется хорошо.спасибо – odd

Смежные вопросы