Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
  • Как сформировать таблицу из массива данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    SELECT *, to_days(curdate()) - to_days(date_add) as diff
    FROM track_tabl WHERE id_user=?
    Ответ написан
    Комментировать
  • Для чего нужно использовать парметр PDO::PARAM_INT в функции bindParam() ?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для начала ответим на вопрос буквально:

    конечно же, в настройках соединения прописано
    PDO::ATTR_EMULATE_PREPARES => false
    В этом случае - вообще незачем.
    Если эмуляция отключена, то можно вообще никогда не указывать тип.

    Правда, насчет "конечно" ты поторопился. Ничего "конечного" в отключении эмуляции нет - оба варианта одинаково безопасные.

    И вот если эмуляцию включить, то как раз и возникнет единственный случай, когда придется биндить с указанием типа: если у тебя в запросе передаются параметры в LIMIT. Если в запросе есть оператор LIMIT и в него передаются параметры, то их надо обязательно биндить через PDO::PARAM_INT - иначе запрос выдаст ошибку.
    Мало того - передаваемые данные надо самостоятельно привести к типу int - PDO это за тебя делать не будет!

    Теперь ответим в общем, объясняя твои многочисленные заблуждения:

    1. Как тебе уже объяснили выше, инъекция - это не про сохранение в базе. Это именно про выполнение запроса. Так что тип поля в БД не имеет значения.
    2. Инъекцию через PDO провести нельзя только если на 100% соблюдается условие "любые данные попадают в запрос только через плейсхолдеры" - просто самим фактом своего присутствия PDO ничего ни от кого не защищает. Кстати, соблюдение этого правила не так просто, как кажется. Решение для большинства нетривиальных случаев можно посмотреть здесь: phpfaq.ru/pdo
    3. Самое важное: если мы используем плейсхолдеры, то все остальное уже неважно. Указывай какой хочешь тип, или не указывай вовсе - инъекции не будет. То есть, к безопасности твой вопрос про указание типа отношения не имеет.
    4. Если ты не указал тип, то по умолчанию берется PDO::PARAM_STR. Это очень удобно, поскольку БД (по крайней мере - mysql) всегда корректно обработает любые данные, если они переданы, как строки

    Так что, я думаю, что ты теперь и сам можешь ответить на вопрос, "зачем указывать тип".
    И будешь писать просто
    $sth = $dbh->prepare('SELECT * FROM fruit WHERE calories < ? AND colour = ?');
    $sth->execute([$_POST['calories'],$_POST['colour']]);
    Ответ написан
    1 комментарий
  • Печать картинок из папки на сервере js/php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сначала надо подключить принтер...
    Ответ написан
    Комментировать
  • Как рассчитать разницу между датами PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    SELECT to_days(curdate()) - to_days(date_add) as diff FROM track_tabl WHERE id_user=?
    Ответ написан
    Комментировать
  • Как реализовать замену параметров в строке php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    https://www.google.ru/search?q=php+замена+подстроки

    Поверь, это совсем несложно
    Ответ написан
    Комментировать
  • PDO/MySQLi и array в запросе?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    • PDO -phpfaq.ru/pdo#in
    • Mysqli - пол-экрана текста, так что без враппера совсем грустно.

    Зато с враппером - всего дна строчка
    $data = $db->getAll("SELECT * FROM news WHERE id IN (?a)", $json);
    Ответ написан
    Комментировать
  • Как добавить изображение в базу данных, не сохраняя его в директорию?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Изображения. В базу. Добавлять. Не нужно.
    Ответ написан
  • PHP ООП объект. Как сделать выборку объектов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На самом деле тут всё сложно.
    В идеале, все должно быть так:

    В массиве объектов "таскать" за собой полное содержание статей

    Потому что объект и должен, по идее, содержать все свойства сущности "Статья".

    Но все эти прекрасные теории разбиваются о суровую действительность. Главных камня преткновения два:
    1. Заведомая условность маппинга записи из таблицы БД на объект в программе.
    2. Не бесконечная мощность компьютера, которая и заставляет нас не таскать текст статьи там, где нужно вывест только заголовок.

    Поэтому мы идем на всяческие ухищрения. В частности, мы договариваемя сами с собой, что наш объект "статья" - это отображение записи из таблицы. То есть, он жёстко привязан к структуре таблицы в БД. И дальше мы делаем себе ещё одно послабление - при инициализации объекта мы сожем указать, что нам нужен только заголовок. И тогда код создаст объект, то у него будет заполнено только одно свойство.

    Соответственно, ответ на первый вопрос - массив объектов, но урезанных, с одним заполненным свойством!

    Ответ на второй вопрос кроется в том же маппинге: Описывая свой объект как отображение таблицы в БД, мы можем описать и связи этой таблицы! И тогда наш объект сможет автоматически "подтягивать" связанные данные, если мы к ним обратимся.
    Ответ написан
  • Почему скрипт не видит подключение MySQLi?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Очень странно.
    В приведенном примере все должно работать.

    Такую ошибку будет писать, если к $db идет обращение из функции.
    Ответ написан
  • В какой момент обновлять данные в БД mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В момент записи.

    База данных - не текстовый файл. И совсем не обязательно удалять объявление физически, чтобы оно больше не показывалась. В объявлении может быть такое поле как "последний день показа". И при выборке показывать только те объявления, у которых эта дата больше либо равна текущей.
    Ответ написан
    Комментировать
  • Почему не работает SafeMySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нужно убрать строчку $mysqli = new SafeMysql("localhost", "root", "1", "ai");
    и $db = new SafeMySQL(); - тоже лишняя.

    Кстати, я исльно сомневаюсь по поводу кодировки. Я бы поставил utf8 - хуже не будет, а вот вот кучи проблем можно будет избежать
    Ответ написан
  • PDO. Чтения из нескольких баз. 2 подключения к одному хосту или одно?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Да, будет.
    Нет, не критично.

    Любой инстанс ПДО - это всегда отдельное новое подключение к БД, не важно, с к одной и той же, или к разным. В теории - это лишняя нагрузка на базу и желательно двух соединений избегать. Но если это не хайлоад, то большой проблемы не будет. Если хавйлоад, то надо осваивать современные технологии и не шарашить SQL прямо в коде, а использовать какую-нибудь интерллектуальную технологию, которая будет составлять запросы сама, и в том числе подставлять имя желаемой базы, беря его из настроек.
    Ответ написан
    Комментировать
  • Как при закрытии окна браузера сбрасывать значение в переменной?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Несмотря на неграмотный заголовок (в момнт, когда пользователь закрывает браузер, никаких переменных уже нету, да и сам РНР скрипт давно умер), сама задача решается очень просто - стандартный механизм сессий идеально для неё подходит.

    Но мне бы такое поведение показалось неудобным.
    Было бы лучше, если бы введенные пользователем данные записывались в БД, и выводились при следующем заходе на сайт. А сборсить их всегда можно отдельной кнопкой
    Ответ написан
    1 комментарий
  • Как решить проблемы с кодировкой у одной буквы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Неважно, одна это буква, или 10. Кодировка соединения с БД настроена неверно.
    Нужно убедиться, что
    - кодировка таблиц действительно utf8
    - кодировка соединения(задается в mysql(i)_set_charset() или в DSN) - utf8
    - кодировка страниц сайта - utf-8
    Ответ написан
    Комментировать
  • Кривое сохранение символов в MySql через PHP. Что делать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Скорее всего, причина в повальной болезни современной школоты: фатальном неумении отслеживать причинно-следственные связи. Например, если при просмотре выводимых из БД данных, они отражаются неправильно, то делается вывод о том, что они записались неправильно. Или, как вариант - аффтар сам же совершает в коде какие-то глубокомысленные телодвижения, не понимая их смысла - просто потому что точно так же пацаны подсказали, а он тупо скопировал - и они-то как раз и портят данные.

    Но в любом случае - проблема в неумении разделить процесс на этапы, и проконтролировать данные на каждом. Чтобы впоследстви хотя бы задать адекватный вопрос, типа "При передаче данных из браузера данные портятся". Или "при записи в БД данные портятся". Вместо этого мы получаем беспомощное "С данными что-то происходит, но что именно и в какой момент - ниняю".
    Ответ написан
  • Не могу понять, где ошибка в коде?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вам сюда.
    Ответ написан
    Комментировать
  • Плохая ли реализация шаблонизации и снижет ли она производительность PHP проекта вообщем?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как всегда, невежество рождает чудовищные идеи и выливается в адские проекты. Начнем с идей

    без всяких тяжелых Smarty и Twig
    Открою тебе маленькую тайну. "Smarty и Twig" НЕ тяжелые.

    PHP сам по себе шаблонизатор
    Это правда. Но ты-то не используешь РНР, а используешь свой самопал с реплейсами.

    Выполняя все тяжелые скрипты в массиве, влияет ли это на производительность?
    ВООБЩЕ НИКАК. Понятие "В массиве" ни малейшего отношения к производительности не имеет. Ну то есть вообще никакого.

    при прохождение по массиву уже использовать eval()
    Поздравляю, твой сайт взломали!

    У меня складывается определенное чувство, что я делаю плохо
    Угадал! Только не в том смысле, в котором ты думал. Проблема в другом.

    Твоя поделка - вообще не шаблонизатор.

    Шаблонизатор - это когда ВЕСЬ HTML пишется в шаблоне. Читай по буквам - В-Е-С-Ь. Это означает, что в коде контроллера не должно быть написано ни одного тега. А при твоей системе у тебя половина HTML будет в контроллере. Зачет не сдан, садись, два.
    Ответ написан
  • Как вывести с mysql больше одной строки через mysql_fetch_array?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Один из тех вопросов, от которых волосы встают дыбом. На всех частях тела.

    Ну ладно - вопрос. От человека, который массив в первый раз в жизни увидел. Можно понять.

    НО ОТВЕТЫ!!! "Тут какие-то заборы! Коровники! Мама, мы в аду! Мы в аду, мама!"
    Ответ написан
    Комментировать
  • Возможно написать бота, участвующего в акциях?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Возможно не пытаться украсть то что тебе не принадлежит, а заняться честным трудом.

    При тех же трудозатратах можно получить большую, а - главное - честную прибыль.
    Ответ написан
    Комментировать