После переноса на другой хост не вставляет строку в бд

JonBrasers

Новичок
Всем привет!
После переноса сайта на другой хост не вставляет строки в бд.
Код не менялся, на старом хосте все работает отлично.
Что может быть и куда копать???
Не судите строго, я новичек. И заранее спасибо!

  • Сервер: Localhost via UNIX socket
  • Тип сервера: MariaDB
  • Соединение сервера: SSL не используется Документация
  • Версия сервера: 10.3.16-MariaDB - MariaDB Server
  • Версия протокола: 10
  • Кодировка сервера: UTF-8 Unicode (utf8)
  • Apache
  • Версия PHP: 7.3.12


PHP:
class Db {

    protected $db;
    
    public function __construct() {
        $config = require 'app/config/db.php';
        $this->db = new PDO('mysql:host='.$config['host'].';dbname='.$config['name'].'', $config['user'], $config['password']);
    }

    public function query($sql, $params = []) {
        $stmt = $this->db->prepare($sql);
        if (!empty($params)) {
            foreach ($params as $key => $val) {
                if (is_int($val)) {
                    $type = PDO::PARAM_INT;
                } else {
                    $type = PDO::PARAM_STR;
                }
                $stmt->bindValue(':'.$key, $val, $type);
            }
        }
        $stmt->execute();
        return $stmt;
    }

    public function row($sql, $params = []) {
        $result = $this->query($sql, $params);
        return $result->fetchAll(PDO::FETCH_ASSOC);
    }

    public function column($sql, $params = []) {
        $result = $this->query($sql, $params);
        return $result->fetchColumn();
    }

    public function lastInsertId() {
        return $this->db->lastInsertId();
    }

}
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ошибки надо включить и посмотреть
 

JonBrasers

Новичок
функция записи в бд

PHP:
public function register($post) {
        $params = [
            'id' => '',
            'login' => $post['login'],
            'email' => $post['email'],
            'pass' => password_hash($post['pass'], PASSWORD_BCRYPT),
        ];
        $this->db->query('INSERT INTO user VALUES (:id, :email, :login, :pass)', $params);
    }
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну тогда дебажь, телепатов у нас нет.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Выясняй как так выходит, что нет ошибок, а записей нету
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
расставляешь брейкпоинты и с отладчиком идешь по коду, смотришь, так ли выполняется. Или проще - пихаешь exit постепенно до места вызова записи в базу
 

JonBrasers

Новичок
расставляешь брейкпоинты и с отладчиком идешь по коду, смотришь, так ли выполняется. Или проще - пихаешь exit постепенно до места вызова записи в базу
до записи в бд ошибок нет( как проверить бд, какой был запрос, ошибки?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Если была бы ошибка, она была бы. А проверить - вывести запрос на экран и выполнить в консоли mysql
 

Фанат

oncle terrible
Команда форума
Ты английский хотя бы минимально знаешь?
Почему функция, которая возвращает массив строк, называется row?
По-хорошему надо и это переписать но чтобы не портить обратную совместимость этого ужаса, я пофиксил только то что не затронет существующий код
Помимо прочих улучшений, теперь твой класс будет сообщать об ошибках
PHP:
class Db {

    public $db;

    public function __construct() {
    
        $config = require 'app/config/db.php';
        $options = [
            \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
            \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
            \PDO::ATTR_EMULATE_PREPARES   => false,
        ];
        $dsn = 'mysql:host='.$config['host'].';dbname='.$config['name'].';charset=utf8mb4';
        try {
            $this->db = new PDO($dsn, $config['user'], $config['password'], $options);
        } catch (\PDOException $e) {
             throw new \PDOException($e->getMessage(), (int)$e->getCode());
        }
    }

    public function query($sql, $params = []) {
        $stmt = $this->db->prepare($sql);
        $stmt->execute($params);
        return $stmt;
    }

    public function row($sql, $params = []) {
        $result = $this->query($sql, $params);
        return $result->fetchAll(PDO::FETCH_ASSOC);
    }

    public function getRows($sql, $params = [], $fetchMode=PDO::FETCH_ASSOC) {
        $result = $this->query($sql, $params);
        return $result->fetchAll($fetchMode);
    }

    public function column($sql, $params = []) {
        $result = $this->query($sql, $params);
        return $result->fetchColumn();
    }

    public function lastInsertId() {
        return $this->db->lastInsertId();
    }
}
Но по уму конечно row() должна возвращать результат fetch(), а для fetchAll() я добавил новый метод
 
Последнее редактирование:
Сверху