За последние 24 часа нас посетили 51593 программиста и 1758 роботов. Сейчас ищут 827 программистов ...

PDO ошибка SQLSTATE[3D000]: Invalid catalog name

Тема в разделе "PHP и базы данных", создана пользователем TigerZaka, 10 июл 2013.

  1. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Доброго времени суток!

    Код (Text):
    1.  
    2. $login = $_POST['login'];
    3. $password = $_POST['password'];
    4.        
    5. $query = "SELECT * FROM `product` WHERE `height` = '$login' AND `cost` = '$password' ";
    6. $result = mysql_query($query);
    7. while ($tt = mysql_fetch_array($result)) { echo $tt['mark']; }
    Вышеуказанный код, отлично работает. Решил сделать тоже самое с PDO
    Код (Text):
    1.  
    2. $login = $_POST['login'];
    3. $password = $_POST['password'];
    4.        
    5. $sth = $this->db->prepare("SELECT * FROM product WHERE height = :login AND cost = :password ");
    6. $sth->execute(array(':login' => $login, ':password' => $password));
    7.        
    8. $data = $sth->fetchAll();
    9. print_r($data);
    Результат array()

    Подскажите, куда стоит обратить внимание.
    вот как все подключено:
    login_model.php
    Код (Text):
    1.  
    2. class Login_Model extends Model {
    3.     public function __construct() {
    4.         parent::__construct();
    5.     }
    6.     public function run() { //PDO код }
    7. }
    model.php
    Код (Text):
    1.  
    2. class Model {
    3.     function __construct() { $this->db = new Database(); }
    4. }
    database.php
    Код (Text):
    1.  
    2. class Database extends PDO {
    3.     public function __construct() { parent::__construct('mysql: dbname=base; host=localhost', 'root', ''); }
    4. }
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: не работает PDO prepare

    смотрите $login или $password
    может там пусто или некорректное чтото
     
  3. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Re: не работает PDO prepare

    Даже если явно задать переменные - не помогает
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: не работает PDO prepare

    Автор, старый и новый запросы то разные! Специально чтобы заморочаться?
     
  5. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Re: не работает PDO prepare

    ну не принципиально,просто с мобилы переписывать неудобно
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
  7. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Re: не работает PDO prepare

    Спасибо за подсказку, сделал так:
    Код (Text):
    1.  
    2. $this->db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
    3. $sth = $this->db->prepare("SELECT * FROM product WHERE height = :login AND cost = :password ");
    4. $sth->execute(array(':login' => $login, ':password' => $password));
    в итоге получил:
    Не пойму почему No database selected, вроде все правильно в соединении.
    И SQLSTATE[3D000]: Invalid catalog name - что за каталог, таблица в БД?

    Заработало!
    Нашел ответ тут:
    http://stackoverflow.com/questions/...-dbname-tablename-as-opposed-to-tablename-why
    что получилось в итоге:
    Код (Text):
    1.  
    2. $login = $_POST['login'];
    3.         $password = $_POST['password'];
    4.         $this->db->exec('USE base;');
    5.        
    6.         $this->db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
    7.         $sth = $this->db->prepare("SELECT * FROM product WHERE height = :login AND cost = :password ");
    8.         $sth->execute(array(':login' => $login, ':password' => $password));
    9.        
    10.         $data = $sth->fetchAll();
    11.         print_r($data);
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: не работает PDO prepare

    ну и как, с учетом получнного опыта, ты бы назвал эту тему? при чем тут prepare???

    кое-что про указание базы в доках про PDO