Ответы пользователя по тегу MySQL
  • Как опустить значение Definer в триггере?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    В доках пишут, что при опущенном DEFINER подразумевается пользователь, который вызвал CREATE TRIGGER. Имея некоторые права, можно при создании триггера сделать дефайнером кого-то другого. В любом случае, код самого триггера будет выполняться с правами дефайнера (а не пользователя в сессии), поэтому они должны быть предоставлены в необходимом объёме.
    Ответ написан
    Комментировать
  • Есть код вставки в БД одной записи, как вставить список похожих записей?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    В форме повторить по количеству учеников:
    <input ... name="idpupil[]">

    В скрипте вместо последней строки:
    foreach ($idpupil as $pupil) { mysqli_query($link, "INSERT INTO yoqlama(idpupil,date,come,idteacher) VALUES ('$pupil', '$date', '$come', '$idteacher')"); }

    Это максимально костыльный вариант.

    Более лучше:
    $prepared = mysqli_stmt_init($link);
    mysqli_stmt_prepare($prepared, "INSERT INTO yoqlama(idpupil,date,come,idteacher) VALUES (?, ?, ?, ?)");
    $pupil = 0;
    mysqli_stmt_bind_param($prepared, 'isii', $pupil, $date, $come, $idteacher);
    // 'isii' , если date — строка, а ID и come — целые числа ( https://www.php.net/manual/ru/mysqli-stmt.bind-param.php )
    foreach ($idpupil as $id) {
        $pupil = $id;
        mysqli_stmt_execute($prepared);
    }
    mysqli_stmt_close($prepared);


    Не уверен, но примерно так. Кроме того, появляется защита от SQL-инъекций, плохо просто брать из $_POST и вставлять в запрос. Хотя для внутреннего сайта школы, наверно, сойдёт, вряд ли там будет много хакеров.
    Ответ написан
    2 комментария
  • Как решить проблему со входом в MySQL через консоль Git Bash?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Навскидку по гуглу похоже на https://stackoverflow.com/questions/32620670/git-b...

    Попробуйте winpty mysql -u root, как там советуют.
    Ответ написан
    4 комментария
  • Как добавлять/удалять новые данные в базе данных?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    На мой непрофессиональный взгляд, можно хранить в дополнительном словаре соответствие st номеру row в myresults, потом пройтись по множеству удалённых строк, по словарю определить для каждой номер row в myresults и построить запрос на удаление, используя значения из row. Это решает проблему удаления.

    Вариация — добавить в БД автоинкрементируемый столбец id, в словаре сохранять именно этот id (st→id), тогда запрос на удаление получается гораздо проще.

    Для добавления, мне кажется, только парсить строку регуляркой.

    import re;
    
    line = '25.06.2019 272\xd0\xb0 4 13:20 - 14:50 \xd0\xbb\xd0\xb5\xd0\xba. \xd0\xad\xd0\xba\xd0\xbe\xd0\xbd\xd0\xbe\xd0\xbc\xd0\xb8\xd0\xba\xd0\xb0 \xd0\xbe\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb7\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8 \xd0\x9a\xd0\xb0\xd0\xbb\xd1\x83\xd0\xb3\xd0\xb8\xd0\xbd\xd0\xb0 \xd0\x9d.\xd0\x90. 314 \xd0\x9d ';
    expr = re.compile('^([0-9.]+) ([0-9\xd0\xb0-\xd1\x8f]+) (\d+) (\d+:\d+) - (\d+:\d+) (.*) (\d+ \xd0\x9d) $');
    match = expr.match(line);
    
    for val in match.groups() :
    	print(val);


    Либо более читаемо,
    # -*- coding: utf-8 -*-
    # комментарий выше должен быть первой или второй строкой в файле исходника, содержащего юникод (здесь, русские буквы)
    
    import re;
    
    line = '25.06.2019 272а 4 13:20 - 14:50 лек. Экономика организации Калугина Н.А. 314 Н ';
    expr = re.compile('^([0-9.]+) ([0-9а-я]+) (\d+) (\d+:\d+) - (\d+:\d+) (.*) (\d+ Н) $');
    match = expr.match(line);
    
    for val in match.groups() :
    	print(val);
    Ответ написан
    4 комментария
  • Как решить проблему с кодировками mysql/php на новом хостинге?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    mysqli_set_charset ?
    ( экс mysql_set_charset )

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

    UPD Спойлер: у нового хостера MySQL запускалась с флагом --skip-character-set-client-handshake, что и повлекло беды с кракозябрами.
    Ответ написан