Example #1
0
 /**
  * Check the database parameters are correct.
  * The expected parameters are:
  *     [
  *         'driver'   => …,
  *         'host'     => …,
  *         'port'     => …,
  *         'name'     => …,
  *         'username' => …,
  *         'password' => …
  *     ]
  *
  * @param  array $parameters    Parameters.
  * @return bool
  * @throw  Exception\Installation
  */
 static function checkDatabase(array $parameters)
 {
     if (empty($parameters['driver']) || !isset($parameters['host']) || !isset($parameters['port']) || !isset($parameters['name']) || !isset($parameters['username']) || !isset($parameters['password'])) {
         throw new Exception\Installation('Database parameters are corrupted. Expect a driver, a host, ' . 'a port, a name, a username and a password.', 0);
     }
     if (false === in_array($parameters['driver'], Database::getAvailableDrivers())) {
         throw new Exception\Installation('Driver %s is not supported by the server.', 1, $parameters['driver']);
     }
     if ('sqlite' === $parameters['driver']) {
         // Nothing.
     } elseif ('mysql' === $parameters['driver']) {
         $dsn = sprintf('mysql:host=%s;port=%d;dbname=%s', $parameters['host'], $parameters['port'], $parameters['name']);
         try {
             $database = new Database($dsn, $parameters['username'], $parameters['password']);
         } catch (PDOException $exception) {
             throw new Exception\Installation('Cannot connect to the database.', 2, null, $exception);
         }
         $statement = $database->prepare('SELECT COUNT(DISTINCT table_name) ' . 'FROM information_schema.columns ' . 'WHERE table_schema = :database');
         $statement->execute(['database' => $parameters['name']]);
         if (0 < $statement->fetchColumn()) {
             throw new Exception\Installation('Database `%s` is not empty. An empty database is ' . 'required to install sabre/katana.', 3, $parameters['name']);
         }
     } else {
         throw new Exception\Installation('Unknown database %s.', 4, $parameters['driver']);
     }
     return true;
 }