2015-12-04 3 views
2

В производственной среде при использовании подготовленных операторов и всех других проверок необходимо ли проверять ошибки на каждом шагу пути или я могу просто проверить конечный результат $stmt для истинных или ложный?Ошибка обработки подготовленных операторов в производственной среде

Я пытаюсь очистить около 2000 строк функционального файла, и многие из них просто походят на пустое пространство, когда уже сделано столько проверок (т. Е. Проверка пустых значений, требуемых значений, пустых полей и т. Д.).

Вот грубый, чрезвычайно простой пример того, что я хотел бы сделать.

$sql = "SELECT count(*) FROM foo WHERE somecol = ?"; 

$stmt = $conn->prepare($sql); 
$stmt->bind_param("s",$value); 
$stmt->execute(); 

$stmt->bind_result($c); 
$stmt->fetch(); 

if(false === $stmt){ 
    //My error report 
    trigger_error("Something bad happened!"); 
    //Error user sees 
    $userErrorMsg[] 'Some generic msg here'; 
} 

EDIT: я, вероятно, должен упомянуть $conn был проверен ранее.

+0

Для лучшего удобства пользователей вы должны выполнить все проверки и показать пользователю соответствующие сообщения об ошибках. Общее сообщение будет путать пользователя, и ему будет трудно понять, что произошло при отправке формы. –

+0

Общий msg был бы «была ошибка db, пожалуйста, попробуйте еще раз», кроме этого, я не думаю, что они нуждаются в чем-либо, относящемся к тому, почему запрос не удался, любые ошибки, которые могли быть вызваны конечным пользователем, были ранее иметь дело с. – user3154948

ответ

0

Вы должны решить, нужно ли это в вашем случае или нет. Но некоторые программисты скажут, что код, чтобы поймать ошибку, почти так же, как и обычный код.

Короче: Если может быть ошибка CATCH IT;)

В противном случае я бы порекомендовал вам создать класс-оболочку для своих функций БД.

Просто небольшой пример, чтобы указать вам в правильном направлении:

class MyDBClass { 
    private static $con = null; 
    private static $instance = null; 

    public static function getInstance() { 
     if(null === self::$instance) { 
      // add error handling ;) 
      self::$instance = new MyDBClass(); 
      self::$instance->setConnection(); 
     } 

     return self::$instance; 
    } 

    private function setConnection() { 
     if(null === self::$con) { 
      // add error handling ;) 
      self::$con = mysqli_connect("localhost","my_user","my_password","my_db"); 
     } 
    } 

    private function __construct() {} 

    public function select($tableName, $columns = "*", $conditions = array(), $numRows = null) { 
     // add your stuff with error handling 
    } 

    public function selectRow($tableName, $columns = "*" , $conditions = array()) { 
     // add your stuff with error handling 
    } 
} 

// use of class 
$db = MyDBClass::getInstance(); 
$db->select("mytable");// would (for example) select * from mytable 

Примечание: Это не рабочий пример, я бы рекомендовал, чтобы использовать хорошую основу или небольшой класс-обертку

+0

Это определенно в работе для следующего редактирования. Я катал его в noggin в течение пары недель, но временные ограничения - это проблема на данный момент, и мои навыки еще недостаточно продвинуты, чтобы это сделать своевременно манера. С учетом сказанного, класс обработки ошибок, который я только что закончил, даст мне знать, если что-то пойдет не так, даже если сервер отрывается в 2 часа после многих сортов пива .... lol Так что я думаю, что пока я в безопасности, аналогично этому находится в верхней части списка для следующего редактирования. – user3154948

+0

Рад слышать и думать о том, что «вам не нужно изобретать колесо», есть много хороших, маленьких и ухоженных классов-оболочек на github;) – swidmann

+1

Это правда, однако, для меня просто использование чего-то никогда не учит мне как писать и отлаживать его, если мне нужно, поэтому, пока я буду использовать их в качестве ссылки, я все равно, вероятно, напишу свой собственный. Если за что-то другое, кроме необходимости учиться. – user3154948

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