Выключение этой настройки, кроме увеличения надежности, порождает проблему невозможности повторного использования в запросе именованных плейсхолдеров. Так данный запрос с опцией 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
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, эмулирующая обычные реляционные базы данных), вытаскивать данные оттуда намного легче. Если у Вас что-то подобное, то можно воспользоваться утилитами из этих надстроек.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
$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