ну не был бы антюшка клоуном а стремился реально научиться чему-то и стремился бы быть грамотным программистом - не пришлось бы мне антюшку унижать. изначально я тебе как и всем пытался помогать. но согласись когда ты помогаешь дебилу который игнорирует твои советы и не пытаясь ни их понять ни предмет изучить лезет сразу делать свои решения - сначала можно на стресс и кашу в голове новичка списать. но потом уже начинаешь получать удовольствие от того что точно знаешь что открыв раздел новичков можно всегда найти свежие номера клоунского выступления AnteFil'а. это не потому что я злой. это потому что ты себя раком поставил. с наступающим тебя. но реши уже для себя хочешь ли ты и дальше быть аутистом в глазах сообщества или хочешь стать специалистом с которым приятно вести диалог. и загадай выбранное под куранты. всех благ тебе и твоей семье.
Сосздать как бы основу то ни чего хитрого нет Код (PHP): $stmt = $conn->prepare('SELECT * FROM news'); $stmt->execute(); if($stmt->rowCount() > 0){ while($res = $stmt->fetch(PDO::FETCH_BOTH)){ echo $res['name'].'</br>'; } } Тут же встаёт вопрос во первых как создать менюшку Код (Text): << Вперёд < Первая - 1.2.3.4.5.10.30.50.100 > Последняя >> Назад Или что то подобное
AnteFil, я не понимаю куда ты делаешь и что, если мне не изменяет память первые строки в описании PDO написано, что лучше использовать те классы, которые непосредственно созданы для обслуживания конкретной БД, вот и используй mysqli т.к. все и вся сидит на на MySQL (хостинги в смысле), а когда ты дойдешь до того уровня, что бы использовать какую-то другую БД, то я думаю ты разберешься как с ней работать без всяких вопросов.
зачем здесь prepare, если нету данных, подставляемых в запрос? Можно обойтись PDO::query. Что это за менюшка? Страницы что-ли? Так же, как и всегда создаются, запросы COUNT, инструкции LIMIT. PDO в данном случае ничего не меняет.
AnteFil, тебе уже говорили много раз - ты неправильно учишься. Тебе какие-то примеры постоянно нужны, а надо учиться разрабатывать самому. Я тебе указал, что для реализации постраничной навигации используется функция COUNT, которая позволяет сосчитать общее количество записей, а также часть инструкции select LIMIT, предназначенная для того, чтоб ограничить выборку. После этого достаточно ввести это в любой поисковик и почитать про эти инструкции, и додумать, что нужно. Это не такая сложная задача, на самом деле. Несколько элементарных математических выражений уровня 4 класса средней школы, плюс использование упомянутых мой инструкций
Вообщем намутил я навигацию кидаю только PHP Код (PHP): $news_na_str = 3; // количество новостей на странице // Получаем ГЕТом номер страницы где мы находимся if(isset($_GET['page'])){ $nomerPages = $_GET['page']; if (!preg_match("|^[\d]+$|", $nomerPages)) { exit("<p>Потом переделаю под ошибку тихую</p>");//проверяем регуляркой чё нампришло } }else{ $nomerPages = '1'; } $startIndex = ($nomerPages-1)*$news_na_str; // с какой новости начать выборку $stmt = $conn->prepare('SELECT * FROM news LIMIT ?, ?');// Составляем sql запрос $stmt->bindParam(1, $startIndex,PDO::PARAM_INT);// подменяем даныне $stmt->bindParam(2, $news_na_str,PDO::PARAM_INT); $stmt->execute();// делаем запрос if($stmt->rowCount() > 0){ // Посчитаем количество записей с учётом лимита если их больше 0 то выведем while($res = $stmt->fetch(PDO::FETCH_BOTH)){ echo $res['name'].'</br>'; // выводим заголовки столбиком } $stmt = $conn->prepare('SELECT * FROM news'); // Выполним запрос дабы посчитать сколько всего записей без учёта лимита $stmt->execute(); $kol_vo_vsego = $stmt->rowCount(); // Всего страниц посчитали // номер последней страницы $PoslednyaPage = ceil($kol_vo_vsego/$news_na_str); }
зачем регуляркой проверять ввод? есть другие, более дешевые способы. зачем ты используешь подготовленные запросы на одноразовую выборку данных? ты понимаешь что при этом серверу 4 запроса падает а не 2? зачем ты дважды выбираешь новости - один раз среза и второй раз общее число? ты уверен что осознанно юзаешь _BOTH при итерации результата?
Пользовательский ввод автоматически заключается в кавычки, поэтому нет риска SQL иньекции. (Из мануала) Но на всякий случай я решил добавить регулярку. Честно сидел пытался вкурить 31 числа но понял что особого значния в данном случае не играет и можно обойтись вообще без флага Добавлено спустя 4 минуты 52 секунды: Подготовленный запрос использовал для того что бы подставить Пользовательский ввод
никто не прости тебя отказаться от фильтрации пользовательского ввода. я говорю о том что регуляркой число ковырякть - накладно по сравнению с другими способами. в общем похоже ты решил не становиться адекватным в наступившем году и продолжаешь говнокодить. цитировать Игоря не буду... Добавлено спустя 4 минуты 17 секунд: совсем не там где надо. ты пока все еще не понимаешь что пишешь. ты просто накидываешь всё подряд. что считается "крутым" видимо. но как это работает - тебе до фени.
такого в мануалах нет. давай ссылку, или пиздишь. В мануалах написано что надо юзать либо риалэскейп с предаврительно установленной кодировкой через родное API а не через SET NAMES и только тогда (!) будет защита. Ну или плейсхолдеры. То что ты делаешь - это глубокий и упорный самообман.
не, дядь. если ты читать умеешь то тебе другая ссылка поможет. хотя смотреть и видеть - разные вещи. но я не жадный. https://php.net/manual/ru/mysqli.quickstart.prepared-statements.php
а, понятно. я ж говорю что своего мнения у тебя нет и ты юзаешь то что другие когда-то брякнули... ну-ну... ну и как бы я тебе не навязывал расширение. тебе бы внимательно страницу мануала прочитать. но ты не можешь. ты балядь цепляешься за то что видишь ли тебе расширение левое навязывают. ты же понимаешь что дальнейший диалог с тобой тупо бесполезен? создай себе форум и выкладывай там свой "обоснованный" говнокод.
О_О что это за хуета? Откуда это? Добавлено спустя 2 минуты 17 секунд: Там всё правильно написано. Потому что используются плейсхолдеры ж. А не регулярки ж.
с хабра вроде. я по крайней мере помню что сталкивался с таким высером. впрочем там же вроде и была мысль что каждый пхп-программист пишет свой врапер для работы с субд поэтому как бы пофигу какое расширение ("и" или не-"и") он будет использовать - для вышестоящего проекта апи будет все равно самописный.
А сколько тут было постов о том, что ты все не правильно делаешь, но что то ты не спешишь менять свою стратегию. Добавлено спустя 1 минуту 48 секунд: mysqli нормальная библиотека, предназначена для работы на прямую, простая, удобная и вообще. PDO муть мутная, и на много сложнее чем mysqli.
Номера страниц обычно беру просто преобразованием типа: Код (Text): $page = (int) $_GET["page"]; Если в $_GET["page"] придёт всякая хрень, то в $page окажется 0, и это можно правильно отработать - выдать 404-ю ошибку, к примеру. Дальше, по вычислениям у нас в переменных уже гарантировано числа, поэтому можно и не использовать плейсхолдеры, можно подставить их прямо в строку запроса. Хотя в данном случае мне кажется, что и prepared не очень дорого, здесь я позволю себе с Ganzal не согласиться. 1 запрос вместо 4 - не заметно на деле, вот 1 вместо 1000 - заметно. По поводу Mysqli - вполне нормальная библиотека, писал с её помощью много всякой мелочи, всё удобно. PDO тоже использовал, в ней удобно, что можно не вызывать fetch, а просто использовать результат выполнения запроса в foreach. О, для подсчёта количества новостей нужно использовать запрос select count(*) from news, а не делать полную выборку новостей
ну mysqli предназначено для работы с MySQL, а PDO со всеми БД, но как можно понять PDO должно быть сложнее и не в полной мере реализует все, что реализуют специализированный класс, короче лучше использовать специализированный класс (mysqli), нежели универсальный (PDO).