За последние 24 часа нас посетили 26730 программистов и 1482 робота. Сейчас ищут 935 программистов ...

pdo и выборка определенных столбцов

Тема в разделе "PHP и базы данных", создана пользователем Slavka, 20 ноя 2016.

  1. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    Господа - у меня встала необходимость изучить pdo - начал ковырять

    PHP:
    1. <?php
    2.  
    3. class test
    4. {
    5.     protected $id;
    6.     protected $name;
    7.     protected $int;
    8.  
    9.     public function getId()
    10.     {
    11.         return $this->id;
    12.     }
    13.     public function setId($id)
    14.     {
    15.         $this->id = $id;
    16.     }
    17.     public function getName()
    18.     {
    19.         return $this->name;
    20.     }
    21.     public function setName($name)
    22.     {
    23.         $this->name = $name;
    24.     }
    25.     public function getInt()
    26.     {
    27.         return $this->int;
    28.     }
    29.     public function setInt($int)
    30.     {
    31.         $this->name = $int;
    32.     }
    33.  
    34.  
    35. }
    36.  
    37. $dsn = "pgsql:host=127.0.0.1;dbname=test";
    38.  
    39. $opt = array(
    40.     PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    41.     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    42. );
    43.  
    44.  
    45. $connection = new PDO($dsn,"postgres","123",$opt);
    46.  
    47.  
    48. $statement = $connection->prepare('SELECT * FROM test');
    49. $statement->execute();
    50. $statement->setFetchMode(PDO::FETCH_CLASS, 'test');
    51. while($row = $statement->fetch()) {
    52.     echo $row->getId() . ' ' . $row->getName();
    53. }
    в итоге если я правильно понимаю - сервак выдает клиенту все столбцы а не "id" и "name", а вот на экран выводятся только эти два

    если использовать
    PHP:
    1. $statement = $connection->prepare('SELECT id,name FROM test');
    для чего тогда пишется класс с описанием базы данных ..однако если при использовании его получится чтото типа

    PHP:
    1. $test = new test();
    2. $statement = $connection->prepare('SELECT $test->id,$test->name FROM test');
    и вроде как больше букв даже .. да и работать не будет - ведь в переменных id и test сейчас нет ничего

    далее
    если использовать такое выражение (
    PHP:
    1. $statement->setFetchMode(PDO::FETCH_CLASS, 'test');
    2. while($row = $statement->fetch()) {
    3.     echo $row->getId() . ' ' . $row->getName();
    4. }
    то например тот же netbeans не поймет что $row это и есть класс "test"
    и автоподстановка работать не будет - писать опять руками ?

    так зачем столько манов и учебников пишут что надо использовать именно так .. и никак иначе .. возможно это я непонимающий идиот

    ах да - опять же мой руководитель требует чтобы в функциях класса были описаны получается не таблицы .. а объекты - например user
    а в нем каким то образом склеить FIO , INN , Snils ( схему думаю вы видели в соседней теме - где каждое поле это отдельная таблица).
    но каким образом это сделать я пока не представляю..
    описывать все таблицы - в конструкторе везде ставить джоины .. блин вот бред реально
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
  3. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    это как бы немного не то .. вот чего я добиваюсь

    например мне нужно из этой таблицы данные по 2 столбцам
    примерно так я хочу чтобы было примерно так
    PHP:
    1. $test=new test();
    2. $pdo->prepare ( Select ? from $tablename)
    3.    while($row = $pdo->fetch($test->id,$test->name)) {
    4.           echo $1 . ' ' . $2;
    5. }
    вы сами видите на сколько сократился запрос и количество получаемых данных

    но как такого добиться я не знаю
     
    #3 Slavka, 20 ноя 2016
    Последнее редактирование: 20 ноя 2016
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    я даже на это извращение забью
    --- Добавлено ---
    почитай книжки для начинающих пхп прогеров, а не лесть в дерби
     
  5. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а при чем тут книжка для начинающих - пдо это совсем не для начинающих .. и как извесно pdo создано для упрошения написания
    а после того что я вижу в манулах это совсем не упрошение а просто изменение правил написания
     
  6. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а я сейчас ищу как упростить себе написание любым доступным способом
     
  7. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    doctrine, или всякие реализации в framework'ах, например active record в Yii2, можно посмотреть как они сделаны
     
  8. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а может у кого есть на примете книжка ... мануал .. все что угодно но скажем так .. с продвинутыми примерами - ну не верю я что не сделали такого
    что все используют select * - при работе с pdo .. или же 3...4 раза в разных вариациях повторяют все нужные имена столбцов - сначала в sql запросе - потом при разборе полей .. а если полей 100 ..
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    SELECT ID, NAME, LALKA FROM TABLE
     
  10. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Как вариант https://ru.wikipedia.org/wiki/Doctrine
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    PDO, как известно, сделано для упрощения миграции кода между разными базами данных, в случае, если используемые базы есть в списке адаптеров PDO.
    --- Добавлено ---
    Вы PDO и ORM путаете.