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

Nagibator665

Гуру форума
Заблокирован
Регистрация
27 Авг 2012
Сообщения
258
Реакции
80
  • Автор темы
  • Заблокирован
  • #1
Помогите пожалуйста, что-то где-то накосячил и не могу понять почему не работает. Хочу сделать регистрацию пользователей, есть такие классы
для работы с бд
Код:
<?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();
    }
}
помогите, где косяк.. данные в бд не попадают :(
 
вот тут вместо
$stmt->execute()

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

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


можно заменить на
"INSERT INTO {$table} SET " . implode(', ', $field_names);
 
  • Автор темы
  • Заблокирован
  • #3
всё оказалось намного проще, надо было отловить ошибку, добавил self::$PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

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