За последние 24 часа нас посетили 19312 программистов и 1615 роботов. Сейчас ищет 1001 программист ...

вопросы по PDO

Тема в разделе "PHP для новичков", создана пользователем xfreewindx, 22 фев 2012.

  1. xfreewindx

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

    С нами с:
    22 фев 2012
    Сообщения:
    55
    Симпатии:
    0
    Здравствуйте.
    Осваиваю ООП и PDO.
    Есть трудности с выводом информации из БД.

    Никак не могу понять почему не работает это кусок кода:
    Код (Text):
    1.  
    2. class Model {
    3.     /**
    4.      * DB connection function
    5.      * @return PDO
    6.      * @throws PDOException
    7.      */
    8.     private function dbConnect() {
    9.         $host = 'localhost';
    10.         $db_name = 'news';
    11.         $login = 'root';
    12.         $password = '';
    13.  
    14.         try
    15.         {
    16.             $dbh = new PDO("mysql:host = $host;  dbname = $db_name", $login, $password);
    17.             if (empty($dbh))
    18.                 throw new PDOException();
    19.             else
    20.                 return $dbh;
    21.         }
    22.         catch (PDOException $e)
    23.         {
    24.             echo 'Ошибка соединения с Базой Данных:' . $e->getMessage();
    25.         }
    26.     }
    27.  
    28.     /**
    29.      * This function return list of all articles from DB.
    30.      * @return array
    31.      */
    32.     public static function articles_all() {
    33.         $pdo = Model::dbConnect();
    34.  
    35.         $query = "SELECT * FROM `articles` ORDER BY `id_article` DESC";
    36.         $stmt = $pdo->prepare($query);
    37.         $stmt->execute();
    38.         $articlesArray = $stmt->fetchAll();
    39.  
    40.         return $articlesArray;
    41.     }
    При вызове articles_all, не выдается список статей. Точнее он пустой, будто бы ни одной статьи нет, хотя это не так. Если подключение к базе данных реализовать в функции articles_all, то есть грубо закомментировать функцию dbConnect и весь код подключения к БД написать в функции articles_all, тогда все работает. Что я не так делаю?
     
  2. yuri

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

    С нами с:
    16 янв 2012
    Сообщения:
    288
    Симпатии:
    2
    Код (PHP):
    1. Model::dbConnect() 
    ===
    При попытке вызова нестатических методов статически выводится предупреждение уровня E_STRICT.
    http://www.php.ru/manual/language.oop5.static.html
    ===

    кто-то перемудрил с ООП ? :)))
     
  3. xfreewindx

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

    С нами с:
    22 фев 2012
    Сообщения:
    55
    Симпатии:
    0
    Спасибо за помощь.
    :) Поправил на static
    public static function dbConnect()

    все равно не выводит список. Не пойму почему не отрабатывает, такое впечатление что $pdo = Model::dbConnect(); не отрабатывает.

    Добавлено спустя 27 минут 22 секунды:
    Похоже дело в return, в function dbConnect().

    Не пойму как при помощи PDO реализовать подключение к MySQL.
    До этого использовал такуб функцию и вызывал где надо и все работало.

    Код (Text):
    1.  
    2. function startup()
    3. {
    4.     // Настройки подключения к БД.
    5.     $hostname = 'localhost';
    6.     $username = 'root';
    7.     $password = '';
    8.     $dbName = 'news';
    9.  
    10.     // Языковая настройка.
    11.     setlocale(LC_ALL, 'ru_RU.CP1251');
    12.  
    13.     // Подключение к БД.
    14.     mysql_connect($hostname, $username, $password) or die('No connection with data base');
    15.     mysql_query('SET NAMES cp1251');
    16.     mysql_select_db($dbName) or die('No data base');
    17. }
    Попробовал то же самое с помощью PDO реализовать, что-то пока не получилось. Я могу конечно добавить строчку
    $dbh = new PDO("mysql:host = $host; dbname = $db_name", $login, $password); в каждую функцию и все заработает, но мне кажется это неправильно. Объект что ли return возвратить не может?