За последние 24 часа нас посетили 5865 программистов и 470 роботов. Сейчас ищут 140 программистов ...

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

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

  1. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    967
    ну не был бы антюшка клоуном а стремился реально научиться чему-то и стремился бы быть грамотным программистом - не пришлось бы мне антюшку унижать. изначально я тебе как и всем пытался помогать. но согласись когда ты помогаешь дебилу который игнорирует твои советы и не пытаясь ни их понять ни предмет изучить лезет сразу делать свои решения - сначала можно на стресс и кашу в голове новичка списать. но потом уже начинаешь получать удовольствие от того что точно знаешь что открыв раздел новичков можно всегда найти свежие номера клоунского выступления AnteFil'а. это не потому что я злой. это потому что ты себя раком поставил. с наступающим тебя. но реши уже для себя хочешь ли ты и дальше быть аутистом в глазах сообщества или хочешь стать специалистом с которым приятно вести диалог. и загадай выбранное под куранты. всех благ тебе и твоей семье.
     
  2. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    461
    Симпатии:
    1
    Сосздать как бы основу то ни чего хитрого нет
    Код (PHP):
    1. $stmt = $conn->prepare('SELECT * FROM news');
    2. $stmt->execute();
    3. if($stmt->rowCount() > 0){
    4. while($res = $stmt->fetch(PDO::FETCH_BOTH)){
    5.  echo $res['name'].'</br>';
    6. }
    7. }
    8.  
    Тут же встаёт вопрос во первых как создать менюшку
    Код (Text):
    1. << Вперёд < Первая - 1.2.3.4.5.10.30.50.100 > Последняя >> Назад

    Или что то подобное
     
  3. VLK

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

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    AnteFil, я не понимаю куда ты делаешь и что, если мне не изменяет память первые строки в описании PDO написано, что лучше использовать те классы, которые непосредственно созданы для обслуживания конкретной БД, вот и используй mysqli т.к. все и вся сидит на на MySQL (хостинги в смысле), а когда ты дойдешь до того уровня, что бы использовать какую-то другую БД, то я думаю ты разберешься как с ней работать без всяких вопросов.
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    7.722
    Симпатии:
    1.498
    зачем здесь prepare, если нету данных, подставляемых в запрос? Можно обойтись PDO::query. Что это за менюшка? Страницы что-ли? Так же, как и всегда создаются, запросы COUNT, инструкции LIMIT. PDO в данном случае ничего не меняет.
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.439
    Симпатии:
    1.744
    а ты что, уже понял как надо экранировать данные в запросах?
     
  6. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    461
    Симпатии:
    1
    Я не делал раньше подобного буду благодарен за ссылку на хороший прмер на тему навигазции
     
  7. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    967
    какой навигаЗции? судовой? что ты навигацией называешь?
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    7.722
    Симпатии:
    1.498
    AnteFil, тебе уже говорили много раз - ты неправильно учишься. Тебе какие-то примеры постоянно нужны, а надо учиться разрабатывать самому. Я тебе указал, что для реализации постраничной навигации используется функция COUNT, которая позволяет сосчитать общее количество записей, а также часть инструкции select LIMIT, предназначенная для того, чтоб ограничить выборку. После этого достаточно ввести это в любой поисковик и почитать про эти инструкции, и додумать, что нужно. Это не такая сложная задача, на самом деле. Несколько элементарных математических выражений уровня 4 класса средней школы, плюс использование упомянутых мой инструкций
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.439
    Симпатии:
    1.744
    Короче это тот редкий случай, который называют "воинствующий невежда"
     
  10. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    461
    Симпатии:
    1
    Вообщем намутил я навигацию кидаю только PHP
    Код (PHP):
    1. $news_na_str = 3; // количество новостей на странице
    2. // Получаем ГЕТом номер страницы где мы находимся
    3. if(isset($_GET['page'])){
    4.     $nomerPages = $_GET['page'];
    5.     if (!preg_match("|^[\d]+$|", $nomerPages)) {
    6.     exit("<p>Потом переделаю под ошибку тихую</p>");//проверяем регуляркой чё нампришло
    7. }
    8. }else{
    9.     $nomerPages = '1';
    10. }
    11. $startIndex = ($nomerPages-1)*$news_na_str; // с какой новости начать выборку
    12.  
    13. $stmt = $conn->prepare('SELECT * FROM news LIMIT ?, ?');// Составляем sql запрос
    14. $stmt->bindParam(1, $startIndex,PDO::PARAM_INT);// подменяем даныне
    15. $stmt->bindParam(2, $news_na_str,PDO::PARAM_INT);
    16.  
    17. $stmt->execute();// делаем запрос
    18. if($stmt->rowCount() > 0){ // Посчитаем количество записей с учётом лимита если их больше 0 то выведем
    19. while($res = $stmt->fetch(PDO::FETCH_BOTH)){
    20.  echo $res['name'].'</br>'; // выводим заголовки столбиком
    21. }
    22. $stmt = $conn->prepare('SELECT * FROM news'); // Выполним запрос дабы посчитать сколько всего записей без учёта лимита
    23. $stmt->execute();
    24. $kol_vo_vsego = $stmt->rowCount(); // Всего страниц посчитали
    25. // номер последней страницы
    26. $PoslednyaPage = ceil($kol_vo_vsego/$news_na_str);
    27. }
    28.  
     
  11. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    967
    зачем регуляркой проверять ввод? есть другие, более дешевые способы.
    зачем ты используешь подготовленные запросы на одноразовую выборку данных? ты понимаешь что при этом серверу 4 запроса падает а не 2?
    зачем ты дважды выбираешь новости - один раз среза и второй раз общее число?
    ты уверен что осознанно юзаешь _BOTH при итерации результата?
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.439
    Симпатии:
    1.744
    Заебал.
     
  13. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    461
    Симпатии:
    1
    Пользовательский ввод автоматически заключается в кавычки, поэтому нет риска SQL иньекции. (Из мануала) Но на всякий случай я решил добавить регулярку.
    Честно сидел пытался вкурить 31 числа но понял что особого значния в данном случае не играет и можно обойтись вообще без флага
    Добавлено спустя 4 минуты 52 секунды:
    Подготовленный запрос использовал для того что бы подставить Пользовательский ввод
     
  14. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    967
    никто не прости тебя отказаться от фильтрации пользовательского ввода. я говорю о том что регуляркой число ковырякть - накладно по сравнению с другими способами. в общем похоже ты решил не становиться адекватным в наступившем году и продолжаешь говнокодить. цитировать Игоря не буду...

    Добавлено спустя 4 минуты 17 секунд:
    совсем не там где надо. ты пока все еще не понимаешь что пишешь. ты просто накидываешь всё подряд. что считается "крутым" видимо. но как это работает - тебе до фени.
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.439
    Симпатии:
    1.744
    такого в мануалах нет. давай ссылку, или пиздишь.

    В мануалах написано что надо юзать либо риалэскейп с предаврительно установленной кодировкой через родное API а не через SET NAMES и только тогда (!) будет защита. Ну или плейсхолдеры.

    То что ты делаешь - это глубокий и упорный самообман.
     
  16. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    461
    Симпатии:
    1
  17. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    967
  18. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    461
    Симпатии:
    1
    Я не хочу использовать mysqli

    Добавлено спустя 2 минуты 14 секунд:
    Мнение основано на этом посте
     
  19. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    967
    а, понятно. я ж говорю что своего мнения у тебя нет и ты юзаешь то что другие когда-то брякнули... ну-ну... ну и как бы я тебе не навязывал расширение. тебе бы внимательно страницу мануала прочитать. но ты не можешь. ты балядь цепляешься за то что видишь ли тебе расширение левое навязывают. ты же понимаешь что дальнейший диалог с тобой тупо бесполезен? создай себе форум и выкладывай там свой "обоснованный" говнокод.
     
  20. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.439
    Симпатии:
    1.744
    О_О что это за хуета? Откуда это?

    Добавлено спустя 2 минуты 17 секунд:
    Там всё правильно написано.
    Потому что используются плейсхолдеры ж. А не регулярки ж.
     
  21. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    967
    с хабра вроде. я по крайней мере помню что сталкивался с таким высером. впрочем там же вроде и была мысль что каждый пхп-программист пишет свой врапер для работы с субд поэтому как бы пофигу какое расширение ("и" или не-"и") он будет использовать - для вышестоящего проекта апи будет все равно самописный.
     
  22. VLK

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

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    А сколько тут было постов о том, что ты все не правильно делаешь, но что то ты не спешишь менять свою стратегию.

    Добавлено спустя 1 минуту 48 секунд:
    mysqli нормальная библиотека, предназначена для работы на прямую, простая, удобная и вообще.
    PDO муть мутная, и на много сложнее чем mysqli.
     
  23. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    967
    ну как бы у них разное назначение)))) имхо их нельзя сравнивать.
     
  24. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    7.722
    Симпатии:
    1.498
    Номера страниц обычно беру просто преобразованием типа:
    Код (Text):
    1.  
    2. $page = (int) $_GET["page"];
    Если в $_GET["page"] придёт всякая хрень, то в $page окажется 0, и это можно правильно отработать - выдать 404-ю ошибку, к примеру. Дальше, по вычислениям у нас в переменных уже гарантировано числа, поэтому можно и не использовать плейсхолдеры, можно подставить их прямо в строку запроса. Хотя в данном случае мне кажется, что и prepared не очень дорого, здесь я позволю себе с Ganzal не согласиться. 1 запрос вместо 4 - не заметно на деле, вот 1 вместо 1000 - заметно.

    По поводу Mysqli - вполне нормальная библиотека, писал с её помощью много всякой мелочи, всё удобно. PDO тоже использовал, в ней удобно, что можно не вызывать fetch, а просто использовать результат выполнения запроса в foreach.

    О, для подсчёта количества новостей нужно использовать запрос select count(*) from news, а не делать полную выборку новостей
     
  25. VLK

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

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ну mysqli предназначено для работы с MySQL, а PDO со всеми БД, но как можно понять PDO должно быть сложнее и не в полной мере реализует все, что реализуют специализированный класс, короче лучше использовать специализированный класс (mysqli), нежели универсальный (PDO).