Вы все еще можете использовать try / catch в PHP:
public function createRegister($register) {
$this->openConnection();
$query = "INSERT INTO register (username, password, email, confirmationToken) VALUES (?, ?, ?, ?)";
try {
// This line is not needed
// $result = $this->mysqli->query($query);
if ($statement = $this->mysqli->prepare($query)) {
$statement->bind_param("ssss", $register->username, $register->passwordHash, $register->email, $register->confirmationToken);
if (!$statement->execute()) {
throw new DAOException("Failed to execute statement: " . $statement->error);
}
$statement->close();
} else {
throw new DAOException("Failed to prepare statement: " . $this->mysqli->error);
}
} catch (Exception $e) {
if ((isset($statement)) && (is_callable(array($statement, 'close')))) {
$statment->close();
}
$this->closeConnection();
throw $e;
}
$this->closeConnection();
}
Это хорошо работает для установления соединения для одной конкретной задачи, но что если вы хотите использовать одно и то же соединение для нескольких задач, которым также нужен доступ к одной и той же схеме? Возможно, вы захотите рассмотреть более продвинутое решение, использующее шаблон singleton / factory для создания и доступа к соединениям с базой данных. Я опубликовал такой пример в качестве решения другого вопроса. Он немного более продвинутый, но как только вы обдумаете это, он станет более производительным.