Работа с MySQL через PDO

Тема в разделе "Как сделать...", создана пользователем Nagibator665, 3 ноя 2012.

  1. Nagibator665

    Nagibator665

    Заблокирован
    Регистр.:
    27 авг 2012
    Сообщения:
    258
    Симпатии:
    79
    Помогите пожалуйста, что-то где-то накосячил и не могу понять почему не работает. Хочу сделать регистрацию пользователей, есть такие классы
    для работы с бд
    Код:
    <?php
     
    require_once 'config.php';
     
    class DB
    {
        private static $PDO;
     
        public function __construct()
        {
            if(!extension_loaded('pdo'))
            {
                die('The PDO library is required');
            }
     
            self::connect();
        }
     
        public function connect()
        {
            try
            {
                self::$PDO = new PDO(DB_DRIVER . ':host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASSWORD);
                self::$PDO->query('SET NAMES' . DB_CHARSET);
            }
            catch(PDOException $e)
            {
                die($e->getMessage());
            }
        }
     
        public function fetch_row_assoc($statement)
        {
            return self::$PDO->query($statement)->fetch(PDO::FETCH_ASSOC);
        }
     
        public function query($statement)
        {
            return self::$PDO->query($statement);
        }
     
        public function last_insert_id()
        {
            return self::$PDO->lastInsertId();
        }
     
        public function insert($table, $values)
        {
            foreach ($values as $key => $value)
                $field_names[] = $key . ' = :' . $key;
     
            $sql = "INSERT INTO " . $table . " SET " . implode(', ', $field_names);
     
            $stmt = self::$PDO->prepare($sql);
     
            foreach ($values as $key => $value)
                $stmt->bindValue(':' . $key, $value);
     
            $stmt->execute();
        }
    }
    registration.php
    Код:
    <?php
     
    require_once 'db.php';
     
    class Registration
    {
        private static $config;
     
        public function __construct()
        {
            $this->db = new DB();
        }
     
        public function create_user($email, $password)
        {
            $email = filter_var($email, FILTER_SANITIZE_EMAIL);
            $password = filter_var($password, FILTER_SANITIZE_STRING);
     
            $values = array(
                'user_email' => $email,
                'user_password' => sha1($password)
            );
     
            $this->db->insert('users', $values);
            //$user_id = $this->db->last_insert_id();
        }
    }
    помогите, где косяк.. данные в бд не попадают :(
     
  2. cruide

    cruide Писатель

    Регистр.:
    25 июл 2012
    Сообщения:
    8
    Симпатии:
    22
    вот тут вместо
    $stmt->execute()

    сделайте так $stmt->execute($values);
    а форыч уберите

    и запись
    "INSERT INTO " . $table . " SET " . implode(', ', $field_names);


    можно заменить на
    "INSERT INTO {$table} SET " . implode(', ', $field_names);
     
  3. Nagibator665

    Nagibator665

    Заблокирован
    Регистр.:
    27 авг 2012
    Сообщения:
    258
    Симпатии:
    79
    всё оказалось намного проще, надо было отловить ошибку, добавил self::$PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    и оказалось что я просто неправильное поле в таблице использую :) Всё добавляется.