@blazert

PHP Parse error: syntax error, unexpected ограничение в хостинге, или же всё же ошибка?

Всем привет, нашёл на просторе гитхаба, скрипт каторый меня интересует, но вот не задача он не работает, перепробовал все версии php начиная с 5.4.16 заканчивая 7.4.8 php, не на одном так и не заработал, отличие только в ошибках, помогите пожалуйста

Backend fatal error: PHP Parse error: syntax error, unexpected '.' in /www/домен/classes/Database.php on line 44\n, referer: домен/start.php

<?php
  class Database
  {
      private $db;

      private $host;
      private $user;
      private $password;
      private $database;

      private $types = [
          'string' => 's',
          'integer' => 'i'
      ];

      public function __construct($host, $user, $password, $database) {
          $this->host = $host;
          $this->user = $user;
          $this->password = $password;
          $this->database = $database;

          $this->db = new MySQLi($host, $user, $password, $database);

          if ($this->db->connect_errno)
              throw new Exception('Failed to connect to the MySQL database: ' . $this->db->connect_error);
      }

      public function query($query, $params = []) {
          $statement = $this->db->prepare($query);
          if (!$statement)
            throw new Exception('Preparing statement faile: ' . $this->db->error);

          $typeStr = '';
          foreach ($params as $param) {
              $type = gettype($param);

              if (!array_key_exists($type, $this->types))
                  throw new Exception('Variable has no known type: ' . $param);

              $typeStr .= $this->types[$type];
          }

Строка 44 ниже 
43          if (count($params) > 0) {
44            $bind = $statement->bind_param($typeStr, ...$params);
45            if (!$bind)
46             throw new Exception('Binding parameters failed: ' . $statement->error);
47          }

          $exec = $statement->execute();
          if (!$exec)
            throw new Exception('Binding parameters failed: ' . $statement->error);

          $result = $statement->get_result();

          $statement->close();

          return $result;
      }
  }

5fb37faef063e786758035.png
  • Вопрос задан
  • 982 просмотра
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Как уже сказали, дело в версии РНР.
Плюс этот неграмотный винегрет надо выкинуть и переписать заново
вот тебе нормальный код

class Database
{
    public $db;

    public function __construct($host, $user, $password, $database)
    {
        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        $this->db = new MySQLi($host, $user, $password, $database);
        $this->db->set_charset("utf8mb4");
    }

    public function query($query, $params = [], $types= '') {
        $types = $types ?: str_repeat("s", count($params));
        $stmt = $this->db->prepare($query);
        $stmt->bind_param($types, ...$params);
        $stmt->execute();
        return $stmt;
    }

    public function select($query, $params = [], $types= '') {
        if (!$params) {
            return $this->db->query($query);
        } else {
            return $this->query($query, $params)->get_result();
        }
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Sanes
@Sanes
$bind = $statement->bind_param($typeStr, ...$params);

для чего там ...
Ответ написан
@Giperoglif
$bind = $statement->bind_param($typeStr, ...$params);


ну вот это заработает только с 5.6 вроде бы так что никакие 5.4 тут не подойдут

ну и если запускаете через cli - смотрите что точно в нем версию php поменяли а не модуль а апача или что там у вас
Ответ написан
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
Дело в версии php. И это точно. У вас стоит 5.4 на сервере, никакой 7.4 там не пахнет. Проверяйте через phpinfo()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы