@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
  • Вопрос задан
  • 886 просмотров
Решения вопроса 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()
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 20:57
3000 руб./за проект
24 апр. 2024, в 20:35
5000 руб./за проект