Задать вопрос
@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
  • Вопрос задан
  • 1062 просмотра
Подписаться 1 Простой 27 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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()
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽