diff --git a/src/Database/Database.php b/src/Database/Database.php index d3ec4d585a..d13b52848d 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -4,6 +4,7 @@ namespace Friendica\Database; use Friendica\Core\Config\Cache\ConfigCache; use Friendica\Core\System; +use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Util\DateTimeFormat; use Friendica\Util\Profiler; use mysqli; @@ -126,7 +127,7 @@ class Database $this->connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $this->connected = true; } catch (PDOException $e) { - /// @TODO At least log exception, don't ignore it! + $this->connected = false; } } @@ -484,6 +485,10 @@ class Database // We are having an own error logging in the function "e" $called_from_e = ($called_from['function'] == 'e'); + if (!isset($this->connection)) { + throw new InternalServerErrorException('The Connection is empty, although connected is set true.'); + } + switch ($this->driver) { case 'pdo': // If there are no arguments we use "query" diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 6f9ee4cdb6..14f970e593 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1795,13 +1795,19 @@ class Contact extends BaseObject /** * @brief Helper function for "updateFromProbe". Updates personal and public contact * - * @param array $contact The personal contact entry - * @param array $fields The fields that are updated + * @param integer $id contact id + * @param integer $uid user id + * @param string $url The profile URL of the contact + * @param array $fields The fields that are updated + * * @throws \Exception */ private static function updateContact($id, $uid, $url, array $fields) { - DBA::update('contact', $fields, ['id' => $id]); + if (!DBA::update('contact', $fields, ['id' => $id])) { + Logger::info('Couldn\'t update contact.', ['id' => $id, 'fields' => $fields]); + return; + } // Search for duplicated contacts and get rid of them if (self::handleDuplicates(Strings::normaliseLink($url), $uid, $id) || ($uid != 0)) { @@ -1814,6 +1820,11 @@ class Contact extends BaseObject // Archive or unarchive the contact. We only need to do this for the public contact. // The archive/unarchive function will update the personal contacts by themselves. $contact = DBA::selectFirst('contact', [], ['id' => $id]); + if (!DBA::isResult($contact)) { + Logger::info('Couldn\'t select contact for archival.', ['id' => $id]); + return; + } + if (!empty($fields['success_update'])) { self::unmarkForArchival($contact); } elseif (!empty($fields['failure_update'])) {