• Как именно плейсхолдеры (подготовленные выражения) защищают от sql-инъекций?

    @MorrisMorgan
    Выключение этой настройки, кроме увеличения надежности, порождает проблему невозможности повторного использования в запросе именованных плейсхолдеров. Так данный запрос с опцией PDO::ATTR_EMULATE_PREPARES установленой в false приводит к ошибке "неверное количество параметров":
    $sql = 'SELECT id FROM contracts WHERE contracts.userID = :UserID AND :UserPermission > 0 OR :UserPermission > 1';
    $query = $db->prepare($sql);
    $query->execute(array(':UserID' => 1, ':UserPermission' => 2)); // ->Exception
  • Как из БД MSM выгрузить данные в базу MySQL?

    @MorrisMorgan
    Johnny07:
    Данные в MSM хранятся в разряженных массивах, называемых глобалями. Доступ к глобали осуществляется также, как к переменной с добавлением символа "^".
    Например:
    ^USERS(11)="Иванов П.П.\11.12.1970\Муж"
    ^USERS(11,"Дети",1)="Иванова Л.П.\01.01.2009\Жен"
    ^USERS(11,"Дети",2)="Иванов С.П.\01.01.2012\Муж"
    Здесь дети с индексами 1 и 2 находятся на 3м уровне вложенности.

    В первом методе действительно программа, но она только для записи в файл одной глобали ^USERS, имеющей один уровень вложенности. Этой глобали в Вашей системе может и не быть. Перечень глобалей, как и их наименования определяет программист. Если Вы не знаете, какие глобали Вам необходимы, тогда нужно сохранить все глобали в один текстовый файл, а потом уже их разгребать, для этого воспользоваться утилитой %GS. Она запускается из консоли MSM, или из под терминала. На предложение ввода имени глобали, ответить "*":
    Global selector: ^*

    Но это не основная проблема. Сама система MSM без надстроек не имеет словаря данных. В примере выше непонятно, что поместил разработчик в узел глобали ^USERS(11,"Дети",2)
    Скорей всего, там строка текста, которая содержит поля, разделенные символом "\". Первое - это ФИО, второе может быть дата рождения или к примеру дата усыновления, в зависимости от того, для чего предназначена программа. В данном случае нужно изучать программное обеспечение, логика которого и определяет словарь данных.
    Существуют различные надстройки, в функции которых входит поддержка словаря данных (типа FileMan, эмулирующая обычные реляционные базы данных), вытаскивать данные оттуда намного легче. Если у Вас что-то подобное, то можно воспользоваться утилитами из этих надстроек.