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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Читабельность понятие субъективное.
    Лично мне проще всего читать когда в глазах не рябит от всяких бессмысленных причиндалов типа скобочек, процентиков, кавычечек и прочих знаков препинания.
    echo "Format: $format. Config: $config->path. System (OS): $os.\n\n";

    Для того чтобы переменные корректно подсвечивались внутри строк, можно взять любой современный редактор.
    Ответ написан
    Комментировать
  • Применим ли BEM в MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Могу ответить за PDO.

    1. PDO не имеет никакого отношения к запросам. ПДО не пишет за тебя SQL и не делает его безопасным. Можешь называть колонки как угодно, ПДО это до лампочки.
    2. Чтобы обезопасить данные, надо использовать **подготовленные выражения.**
    Ответ написан
    Комментировать
  • Можно ли получить количество строк в MySQL по заданному условию, без данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM table WHERE field = ?");
    $stmt->execute([$uslovie]);
    $count=$stmt->fetchColumn();
    Ответ написан
    Комментировать
  • Существует ли удобный способ добавления записи (insert) в php mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Safemysql реализует данный функционал:
    $db->query('insert into `messages` set ?u', $values);

    причем делает это безопасно

    при этом safemysql можно использовать параллельно с существующим кодом, просто передавая существующее подключение к mysqli в конструктор
    Ответ написан
    Комментировать
  • Как выбрать строки имеющие общее значение в столбце MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос какой-то путанный

    если надо действительно получить "Значение" (из примера), которое есть и у id=98 и у id=54, то так и писать

    SELECT значение FROM `table` WHERE id поста = 98 OR id поста = 54


    если же суть в том чтобы получить все ид постов, у которых значение 150, то запрос будет совсем другим

    если надо получить ид постов, у которых одинаковое значение, то третьим.

    если надо узнать, имеют ли посты с ид 98 и 54 общее значение, то четверным.
    А аффтару надо учиться выражать свои мысли по-русски.
    Ответ написан
  • Как получить OUTPUT параметры в php при выполнении хранимых процедур MS SQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Есть мнение, что аутпут параметры не поддерживаются, stackoverflow.com/questions/33617760/php-pdo-mssql...
    Ответ написан
    Комментировать
  • Как вставить значение в БД?

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

    $sql = 'INSERT INTO employees (first_name, second_name, middle_name, id_position) VALUES (?, ?, ?, ?)';
    $pdo->prepare($sql)->execute([$_POST['f_name'], $_POST['s_name'], $_POST['m_name'], $_POST['list-position']]);
    Ответ написан
    Комментировать
  • Pdo->query() дважды выполняет запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Убедись, что файл выполняется только 1 раз.
    Чаще всего двойные запросы - это результат кривого фронт контроллера который запускается на любой запрос к сайту.
    Сделай поле типа варчар и пиши в него $_SERVER['REQUEST_URI'] и увидишь
    Ответ написан
    4 комментария
  • Как грамотно составить функции запросов mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос содержит взаимоисключающие параграфы.
    Если задача наговнокодить абы как, лишь бы работало - то зачем спрашивать, как правильно?

    Если же задача действительно научиться писать правильно, то надо учить ПДО, просто потому что правильная работа с БД в mysqli ГОРАЗДО сложнее, чем в ПДО.

    Для примитивного примера в вопросе действительно разницы никакой. Но как только речь зайдет о добавлении переменных в запрос, то сразу встанет проблема использования подготовленных выражений. Это и само по чебе для новичков сложно, а уж с mysqli их освоить и вовсе задача нереальная. С ПДО гораздо легче. Чтобы начать польззоваться ,надо знать всего три вещи:

    1. Все переменные заменяются в запросе на знаки вопроса. после этого делаем запросу prepare
    2. Сами переменные запихиваем по порядку в execute
    3. После этого запрашиваем у ПДО результат запроса сразу в том виде, в котором они нам нужны

    И все. Пример:
    $stmt = $pdo->prepare("SELECT id, name, price, amount FROM table WHERE id = ?");
    $stmt->execute([$id]);
    $row = $stmt->fetch();

    Все ОЧЕНЬ просто.
    Ответ написан
  • Стоил ли использовать PDO для отправки запросов к БД на php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сравни эти два кода и ответь себе сам:
    mysqi
    $stmt = $mysqli->prepare("SELECT id, name, price, amount FROM table WHERE id = ?");
    $stmt->bind_param("i", $id);
    $stmt->bind_result($id, $name, $price, $amount);
    $stmt->execute();
    $rows = array();
    while ($stmt->fetch())
        $rows[] = array(
            'id' => $id;
            'name' => $name;
            'price' => $price;
            'amount' => $amount;
        );
    }

    pdo
    $stmt = $pdo->prepare("SELECT * FROM table WHERE id = ?");
    $stmt->execute([$id]);
    $rows = $stmt->fetchAll();

    В общем, если ты мазохист, то mysqli тебе отлично подойдет.
    Ответ написан
    1 комментарий
  • Как выводить данные по году и месяцу из одной колонки?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Потому что базы данных еще не освоили телепатию, и для управления нечетким поиском нужно применять специально оговоренные в документации символы-маски, заменяющие любое вхождение символов?
    Ответ написан
    Комментировать
  • Можно ли использовать rowCount() в подготовленных выражениях?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Можно но не нужно.
    Для запросов типа SELECT применять эту функцию нет ни малейшего смысла.

    В данном случае логичнее сделать fetch. Мы же запрашивали какие-то данные из БД? Значит их надо получить. А если мы их получили - значит данные есть, и считать их не нужно
    $check->execute(array(":domainid" => $domainid , ":vhostid" => $vhostid, ":userid" => $login));
    $mainname = $check->fetchColumn();
    if ($mainname) {}

    Если запрос подразумевает получение не одного поля, а нескольких, то вместо fetchColumn() пишем fetch()
    Если запрос подразумевает получение нескольких строк, то вместо fetch() пишем fetchAll()
    Ответ написан
  • Как правильно вывести массив из mysqli (без цикла)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Специально ля всех нубов, которые не понимают как пользоваться циклами и поэтому до ужаса их боятся
    $res=$_DB->query("select * from `table`");
    $rows = [];
    while ($row = mysqli_fetch_row($res)) $rows[] = $row;
    echo json_encode($rows);
    Ответ написан
    Комментировать
  • Почему не выполняется SQL запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    О том, почему не выполняется запрос, ты должен спрашивать не у дяди с улицы, а у своей БД. Только она это знает точно.
    Дядя с улицы может только подсказать, как правильно спросить у базы данных.
    Поэтому меняем код подключения на
    $connect = new PDO("mysql:host=127.0.0.1;dbname=***", "***", "***",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

    И закономерно получаем ошибку
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'index)

    В которой черным по белому написано что слово index базе данных не нравится.
    идем в список зарезервированных слов и убеждаемся что так оно и есть

    И вот дальше начинаем удивляться - почему в phpmyadmin аффтар употребляет обратные апострофы, а в пхп - нет.
    Ответ написан
    1 комментарий
  • Я новичок, объясните правильно ли я использую pdo и обрабатываю ошибки?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нет, здесь все неправильно.

    Если коротко, то

    1. Класс Database выкинуть на помойку.
    2. Все exit() в коде выкинуть на помойку
    3. Все try..catch туда же

    В итоге у нас останется

    class article {
        public function __construct($pdo)
            $this->pdo = $pdo;
        }
        public function get_all_db() {
            $sql = "SELECT `articles_id`, `title`, `keywords`, `description` FROM `articles`";
            return $this->pdo->query($sql)->fetchAll();
        }
        public function get_one_db($id){
            $sql = "SELECT `articles_id`, `title`, `keywords`, `description` FROM `articles` WHERE articles_id = ?";
            $stmt = $this->pdo->prepare($sql);
            $stmt->execute([$id]);
            return $stmt->fetch();
        }
    }


    Все удобно, компактно и безопасно.
    Кода получается меньше чем в mysqli и mysql вместе взятых.
    Ответ написан
  • Удаленное подключение а Mysql на php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Удаленное подключение к Mysql является оправданным решением в разработке системы или же нет?

    вопрос бессмысленный. ответ зависит от конкретных условий задачи.
    к влажным подростковым мечтам про 100500 запросов в секунду не имеет отношения.

    Подойдет ли Mysql для загруженных систем?

    Ну если Фейсбук для тебя недостаточно нагруженная, то даже не знаю. Наверное нет.

    подкиньте литературу, у кого есть по этому направлению?

    Вынужден тебя огорчить. Литературу придется читать 5 лет, в институте, и потом еще столько же набираясь опыта.
    Но сначала надо будет закончить школу
    Ответ написан
    Комментировать
  • Pdo, подстановки в execute, возможно ли в подстановках значения на кириллице?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нет, конечно, невозможно.
    Вы первый, кому пришло в голову писать имя параметра кириллицей.
    Ответ написан
    Комментировать
  • Как перевести запросы mysqli в PDO?

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

    Но тут важно понимать, для чего ты это делаешь.
    Если просто "шоб було" - продолжай использовать mysqli.
    Если хочешь сократить размер кода в 3-10 раз - тогда имеет смысл. Но тогда надо сначала разобраться с тем, что такое PDO и какие преимущества оно дает программисту.

    Например, вместо такого кода
    $name = $mysqli->real_escape_sring($_GET['name']);
    $price = $mysqli->real_escape_sring($_GET['price']);
    $color = $mysqli->real_escape_sring($_GET['color']);
    
    $sql = "SELECT * FROM goods WHERE name = '$name' and color = '$color' and price > '$price'";
    $res = $mysqli->query($sql);
    $result = [];
    while ($row = mysqli_fetch_assoc($res)) {
        $result[] = $row;
    }
    echo json_encode($result);

    В ПДО можно написать
    $stmt = $pdo->prepare("SELECT * FROM goods WHERE name = ? and color = ? and price > ?");
    $stmt->execute([$_GET['name'],$_GET['price'],$_GET['color']]);
    echo json_encode($stmt->fetchAll());

    Что гораздо удобнее.

    Учитывая, что ПДО умеет возвращать данные в десятках различных форматов, вариантов сокращения кодов может быть такое же количество
    Ответ написан
    Комментировать
  • Как отследить на каких доменах используется моя CMS?

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

    1. Чтобы отсечь нелицензионное использование - никак не отследить. Нулленая версия твоего горе-движка появится в интернете через день после релиза, у которой будет оторваны все проверялки, какие ты только сможешь придумать.
    2. Продавать надо не программу а сервис. Размещай свою платформу на своем же сервере и бере помесячную плату за использование. Никаких других вариантов отслеживать использование нет ,и быть не может
    Ответ написан
    7 комментариев
  • Как подсчитать количество заказов?

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

    Как это должно выглядеть на самом деле:

    public function countOrders($user_id)
    {
          $stmt = $this->pdo->prepare("SELECT count(1) FROM orders WHERE user_id =?");
          $stmt->execute([$user_id]);
          return $stmt->fetchColumn(); 
    }
    // и использование
    echo $obj->countOrders($_SESSION['user_session']);

    В детали вдаваться не буду, но когда ты поймешь почему писать надо именно так, а у тебя сейчас в обоих вариантах написан ад, то сможешь считать что окончил начальную школу в программировании.
    Ответ написан