Ответы пользователя по тегу MySQL
  • Как реализована функция encrypt() в MySQL?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Encrypts str using the Unix crypt() system call and returns a binary string. The salt argument must be a string with at least two characters or the result will be NULL. If no salt argument is given, a random value is used.

    man7.org/linux/man-pages/man3/crypt.3.html
    If salt is a character string starting with the characters
    "$id$" followed by a string terminated by "$":

    $id$salt$encrypted

    then instead of using the DES machine, id identifies the
    encryption method used and this then determines how the rest
    of the password string is interpreted. The following values
    of id are supported:

    ID  | Method
    ─────────────────────────────────────────────────────────
    1   | MD5
    2a  | Blowfish (not in mainline glibc; added in some
          | Linux distributions)
    5    | SHA-256 (since glibc 2.7)
    6    | SHA-512 (since glibc 2.7)

    "salt" stands for the up to 16 characters following "$id$" in
    the salt. The encrypted part of the password string is the
    actual computed password. The size of this string is fixed:
    MD5     | 22 characters
    SHA-256 | 43 characters
    SHA-512 | 86 characters

    The characters in "salt" and "encrypted" are drawn from the
    set [a-zA-Z0-9./]. In the MD5 and SHA implementations the
    entire key is significant (instead of only the first 8 bytes
    in DES).


    То есть, по логике, можно и не DES шифровать. Но только если явно указать.
    Ответ написан
    Комментировать
  • Сложный MySQL запрос?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Во-первых, вам не нужны айдишники в таблице дружбы (хотя у вас это таблица подписок, если правильнее выражаться).
    Во-вторых, вам нужно использовать JOIN
    -- Подписки
    select u.id, u.name 
    from t_users me
    left join t_users_friends uf on uf.user_id = me.id
    left join t_users u on u.id = uf.friend_id
    where me.id = 1;
    -- Подписчики
    select u.id, u.name 
    from t_users me
    left join t_users_friends uf on uf.friend_id = me.id
    left join t_users u on u.id = uf.user_id 
    where me.id = 1;
    -- Взаимные подписки (друзья, тяжело)
    select u.id, u.name
    	from t_users me
    	left join t_users_friends uf on uf.user_id = me.id
    	left join t_users u on u.id = uf.friend_id
    	where me.id = 1
    	and u.id in (
    		select u2.id
    		from t_users u2
    		inner join t_users_friends uf2 on uf2.user_id = u2.id
    		where uf2.friend_id = me.id
    	);

    Дружба же - это перекрёстная подписка и она действительно может работать тяжело и вариантом оптимизации является предложенный выше Дмитрий Энтелис вариант.
    Ответ написан
  • PHP регистрация. Правильный ли ход мыслей?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    в поля вводятся пара логин/пароль, проверяется наличие данной пары в бд, если нету то записывается

    Так себе подход. Нет, где-то он работает, но его надо очень с умом применять. А так у вас пользователи понарегают учёток и будут удивляться, почему настройки пропадают.
    foreach($whitelist as $key){
        $_SESSION[$key] = $_POST[$key];
    }

    Посмотрите в сторону filter_input с фильтром по нужному типу данных, если хотите пока без фреймворков поковыряться.

    И почему весь PHP в HTML-файлах?

    header('Location: show.htm');
    Учитывая, что вы ничего не выводили здесь, то можно, например, без редиректа просто выполнить нужную логику и показать другую страницу. Впрочем, разница между вариантами будет невелика, так что можете и так оставить.
    $SelectFromDb = "SELECT * FROM people WHERE name = '$login'";

    Привет, SQL-инъекции! Фильтруйте, как я выше говорил, ввод. Лучше пользуйтесь подготавливаемыми запросами и биндингом параметров - там данные буду обезопашены. А вообще лучше используйте PDO (не забывая о подготовленных запросах и биндинге параметров).
    Это по поводу первых трёх блоков кода.
    В целом, настоятельно рекомендую ознакомиться со стандартами PSR, и прочитать (осознав) PHP The Right Way (там есть перевод, если надо).
    Ответ написан
    Комментировать
  • Как написать парсер для xml?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Можно использовать SimpleXML.
    Или DomDocument.
    Ответ написан
    9 комментариев
  • Как организовать перебор и обработку большого кол-ва данных?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Но проблема в том, что сервер, на котором работает модуль, очень слабый и не выдерживает такой нагрузки.

    Делать это через PHP CLI. Брать товары из БД пачками, а не загружать сразу все в память.
    Ответ написан
    Комментировать
  • Как сделать запрос SQl внутри WHILE другого запроса?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    А почему бы не сделать JOIN вместо того, чтобы делать циклические запросы, которые всё сильно замедлят?
    Ответ написан
    2 комментария