За последние 24 часа нас посетили 22120 программистов и 1118 роботов. Сейчас ищут 697 программистов ...

Я пришёл к PDO ))))

Тема в разделе "PHP для новичков", создана пользователем AnteFil, 31 дек 2014.

  1. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Начал осваивать появился вопрос я подключаюсь к базе и хочу запросить все значения в таблице будет ли разница между вот таким запросом
    Код (PHP):
    1. while($row = $stmt->fetchAll()) {
    2.         print_r($row);
    3.     } 
    4. while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    5.         print_r($row);
    6.     } 
    Как я понял из справки - fetchAll() - функция получения всех строк разом.
    Флаг - PDO::FETCH_ASSOC Возвращает массив.
    Если нет разницы то чем пользоваться.
     
  2. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Доку посмотри, узнаешь.
     
  3. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    dapperkop, антюшка не умеет читать
     
  4. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Я маленько не правильно спросил.
     
  5. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Не важно как ты спрашиваешь, в доке все написано.
     
  6. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Получаеться fetchAll() вернётся и с ошибкой а fetch() в случаи ошибки не вернёться ???
     
  7. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    а дока что говорит? :D
     
  8. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Это он строку из результирующей таблицы превращает в массив...
    Понимаешь? Кароч если результирующая таблица такого вида:
    Код (Text):
    1. Id / Name / Gender / ...
    То и получаемый массив будет вида:
    Код (Text):
    1. array('Id' => '1', 'Name' => 'AnteFil', 'Gender' = 'm', ...)
    Понимаешь? Этот метод возвращает массив из всех строк результирующего набора.

    PDOStatement::fetch - вернет массив из одной строки результирующего набора.
    PDOStatement::fetchAll - вернет массив из всех строк результирующего набора.
     
  9. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Да понял получаеться если я хочу запросить 1 пользователя из базы с его id и паролем то уместно использовать fetch если я хочу запросить 20 пользователей из базы с его id и паролем то fetchAll либо, либо в старой версии я мог запросить всех из базы а потом форычем перебирать в PDO уже пребирать форычем не требуеться я правильно понимаю ???
     
  10. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Наверное, да. Предварительно проверив, что результирующий набор имеет одну строку, иначе - выбросить исключение.
    Ну да.
    Не понимаю о чем ты.
     
  11. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Ну например я запрашиваю 20 пользователей по id из базы мне нужно их почту напечатать.
    foreach ($vse_polzovateli as $email) {
    $email = 'НЕТ почты';
    инсерт в базу
    }
     
  12. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    вставку в базу делай вне цикла, сразу все записи вставляй
     
  13. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    ну это как пример в итоге я понял что можно обобраться к отдельному пользователю сразу не перебирая всех ещё такой вот вопрос по поводу try { и } catch при подключении к базе
    Код (PHP):
    1. try {
    2.     $dbh = new PDO($dsn, $user, $password);
    3. } catch (PDOException $e) {
    4.     die('Подключение не удалось: ' . $e->getMessage());
    5. }
    Так вот, дети, запомните: так делать не надо НИКОГДА.
    Для того, чтобы всего лишь показать ошибку, try..catch используют только дураки:
    - во-первых, этот код избыточен: РНР покажет ошибку и так, безо всяких try..catch.
    - во-вторых, этот код гораздо менее гибкий: он выводит ошибку ТОЛЬКО на экран, в то время как исключение улетит туда же, куда и все остальные ошибки: либо в лог файл, либо на экран, в зависимости от глобальных настроек.
    - в-третьих, этот код лишает нас возможности обрабатывать все ошибки централизованно, в едином exception handler-е.

    Поэтому использовать try..catch нужно только тогда, когда вы собираетесь ОБРАБОТАТЬ ошибку - то есть, совершить какое-то действие, связанное с ФАКТОМ ошибки - откатить транзакцию, например. Для того же, чтобы просто выдать сообщение об ошибке, try..catch использовать не нужно - PHP прекрасно справится сам

    Добавлено спустя 3 минуты 49 секунд:
    Я уже спрашивал подобное viewtopic.php?f=13&t=51320 только там я задавал вопрос про mysql так как быть в итоге
     
  14. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    В тебе проснулся программист?:) Вроде до нового года еще есть время...
    Try catch используется для отлова ошибок, а что ты будешь делать зависит от тебя.
    У тебя включен вывод ошибок на экран?:)
    Бугага, он делает то что ты указал ему. Почему ты так возмущаешься?

    А почему нельзя обработать с помощью трая подключение к базе? Объясни:) Я не верю.

    Есть 2 направления писать без трай катч и использовать их. При использовании трая код становится читабельней, глаза не разбегаются от большого количества ифов и позволяет сразу сконцентрироваться и найти то место где происходит обработка ошибки. Трай катч это бест практис. Учись студент.
     
  15. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Там не мой текст я его скопировал http://phpfaq.ru/pdo забыл сказать

    Добавлено спустя 19 секунд:
    Это как вопрос нужно или нет указывать
     
  16. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ну ты как бы не забывай указывать, я то думал ты сам до этого дошел и так написал:)

    Try catch используется для обработки ошибки. У тебя в проде надеюсь будет выключен вывод ошибок на экран? Обработай ошибку как нибудь.
    Можешь использовать но только надо включать голову и думать как правильно использовать то что предоставляет пхп. впринципе там написано все верно (фаг).
     
  17. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Так а как быть то тогда если к примеру я хочу не выводить ошибку о подключении к базе а положить её в лог файл
     
  18. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    не выводить ошибки а складывать их в лог-файл. это два независимых понятия.
     
  19. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Вопрос возник хочу я выполнить вот такой запрос
    Код (PHP):
    1. $stmt = $conn->prepare('SELECT * FROM user');
    2.  
    Как быть в этой ситуации?
    Подменять переменные не нужно
    Код (PHP):
    1. $stmt->execute(array(':id' => $id)); 
    это отпадает так как переменных нет соответственно дальше как то так
    $stmt->execute();
    а вот как быть с возвратом данных

    Добавлено спустя 1 минуту 18 секунд:
    fetchAll ???
     
  20. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    а зачем нужны подготовленные запросы? ну как ты вот это понял своей прямой извилиной?
     
  21. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Возвращаеться всмысле не всё а только 1 рзультат
     
  22. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    классная погода в москве. метель метёт. самое оно к новому году. чего слышно на валютном рынке?
     
  23. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Если использовать fetchAll так тогда пофиг какой флаг стоит в fetch хоть PDO::FETCH_OBJ хоть PDO::FETCH_ASSOC

    Добавлено спустя 5 минут 31 секунду:
    Да в принцепе его вообще можно не использовать )))))
     
  24. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    похоже я в зебре у антюшки. так и не узнаю подарил ли ему дед мороз мозги на новый год. ну и ладно. всех с наступающим!
     
  25. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    ты в психо-эмоциональном игноре у антюшки

    Добавлено спустя 2 минуты 45 секунд:
    Ладно попробую написать вывод новостей