Здравствуйте у меня другой вопрос , есть допустим обертка для PDO
тут все нормально , вызываем объект PDO в свойство класса. все ок.
с выборкой , удалением и обновлением записи все нормально , а вот добавление с опущеным AUTO_INCREMENT значением `uid` , ведет за собой дублированое добавление записи , тоесть 2 шт!!!! , но если я явно укажу значение `uid` то дублирования не произойдет и ошибки не будет , уверен что в самом скрипте нигде нет дублирование запроса, т.к вызовы единичны.
заметил что добавление второй записи (дубля) происходит когда скрипт заканчивает свое выполнение.
отмечу что у меня такая проблема только с PDO ( PDO::exec($sql) && PDO::query($sql) ) с msql_query(); такого небыло.
может AUTO_INCREMENT что-то барахлит или конфигурация таблицы или самой БД(MyIsam) ведет за собой подобное явление.?
throw new Exception('Не указаны главные параметры');
self::inputFilter($params['table']);
$sql='INSERT INTO '.$params['table'].' SET '.self::getKeyValueSql($params['set']).';';
$data=$this->pdo->exec($sql);
return$data;
}
$this->pdo->exec($sql); всегда возвращает int(1) кол-во затронутых строк. тоесть все ок. и в то-же время труднее т.к отловить проблему счетчиком не удастся. счетчик проблему не на заметит , но вот записи то все-равно две! Дублируются , помогите разобраться. (Добавление)
Нашел проблему, она заключается не в PDO а в .htaccess
были такие строки
этот код генерил, повторную загрузку страницы.... тоесть нужно поправить код чтобы страница не генерерировалась дублем тем самым не дублировала сценарий на ней..
$this->search($body,'Выезд в 7')&&$this->actManager($o,'ALG-current-actno')!=1
То вот такая ошибка:
Parse error: syntax error, unexpected T_VARIABLE in Z:\home\hostname\www\controler.php(324) : eval()'d code on line 1
еще в этом случае если
$this->search($body,'Выезд в 7') AND $this->actManager($o,'ALG-current-actno')!=1
то ошибка такая:
Parse error: syntax error, unexpected T_STRING in Z:\home\hostname\www\controler.php(324) : eval()'d code on line 1 (Добавление)
проблема в том что хочеться это все дело сделать в окне браузера и создавать новые фильтры когда захочется , так-же была идея садить за пульт блонду, поэтому нужно было упростить чтобы не в файл лазать 20 фильтров смотреть , а селектать из БД и выводить в удобночитаемом формате, и редактировать эти фильтры достаточно быстро , для гибкой подстройки критериев, т.к критерии фильтра сразу не поймеш, что человек напишет в сообщении непонятно - поэтому стало необходимо быстрое редактирование, для быстрого пополнения условий (вт.ч критерий) фильтра, пополнять нужно для того чтобы скрипт мог понимать приблизительно чего хочет человек в письме и отвечать ему автоматом, в след чего это все посадится на JS с автоовызовом функции запуска фильтра если определенное время прошло если комп включен
В базу записываются не строки , а имена переменных
OrmaJever пишет:
если же в бд вы записываете переменные типа
CODE (htmlphp):
скопировать код в буфер обмена
$var1 == $var2
то зачем и откуда они возьмутся при выводе из бд?
они беруться из текущего письма(текущей итерации) $o == текущий объект заголовков письма , тема, отправитель , имя, дата и кодировка..
$body == тело письма.
вспомогательные функции:
Search($input,$criteries);
Результаты сравнения динамичны их незапишеш как статику в БД, т.к эти фильтры сверяют письма в ящике, а они меняются. для того чтобы решить сам конфликт с этим EVAL да простит меня бог, можно только ограничитсья условиями в самом файле скрипта, а это же неудобно
Eval по моей версии нужен был для реализации интерфейса, редактирования , создания и удаления, прямо из окна браузера, тоесть полное управление фильтрами и их содержанием
можно конечно записать условия без БД непосредственно в ФАЙЛ скрипта, естевственно я лишусь редактирования из браузера, т.к переменную в БД не положиш, а тока имя, которое только EVAL может интерпретировать. (Добавление)
$o в скрипте меняется, FiltrationDriver применяется при переборе сообщений и выполняет действие в зависимости от совпавшего УСЛОВИЯ:
я уже сам запутался в своей системе , код и вправду индусский , могу оправдываться это первый проект с НУЛЯ в прямом смысле начинал его писать когда знал тока как присвоить перенной значение , и в данный момент система содержит около 2.5к строк кода без HTML естевственно. тоесть какбы система из эксперементальной переросла в значимую.
мне нужно хранить строки сравнения (Вне скрипта) в которых содержаться переменные, для последующей подстановки их значений в скрипте, чтобы в итоге получилась адекватная булева FALSE или TRUE в зависимости от значения переменных , в данном случае это тело письма или его тема, чтобы в скрипте подставить в IF(СЮДА)...
Проблему я решил так-же непонятно , как она и появилась (Вырезаю (CTRL-X) кусочек сравнения например 1 критерию которую подозреваю, запускаю фильтр и ОК(работает) затем возвращаюсь и вставляю (CTRL-V) кусочек обратно и нечего не меняется(все работает) , где логика то?), поэтому я не контролирую ситуации и скорее всего такая проблема может возникнуть и еще раз обратно-же по непонятным причинам в неудобное время. надо чтото менять, А может быть в БД строки как-то изменились(ну там побайтово)? ну там заместо англ о стала русс о поэтому не видно глазом и очевидно не ясно было (я выводил(ECHO) строчку (STRING) сравнения сразу до EVAL, и недоумевал ведь все нормально) , причина не ясна. что скажете? (Добавление)
Это функция в кратце, выполняющая перебор фильтров, так-же в нем есть и другие структуры реализуемые с помощью EVAL но они работали
$o это обьект полей заголовков письма полученый из IMAP
а $body это отдельно вызываемое тело от сообщения если Тема сообщения совпала с activeIf, чтобы не нагружать скрипт и канал связи лишний раз
я понимаю то что вы опытный человек в этом деле, извеняюсь , но дело в том что я даже не знаю чем заменить eval.
добавлю еще только что изменить строчку
явное указание типа данных не поможет, т.к
Она в данном случае строку не воспринимает , так как она есть , а выдает ошибку синтаксическую. я знаю, и меня предупреждали уже, но хранить условия фильтра в коде и постоянно открывать файл я не хотел, я создал таблицу в бд и все условия запихал туда , но тут же нужна подстановка после извлечения записи из БД , помог EVAL , но сейчас эта штука просто смеется на до мной, добавлю то что такую-же операцию пробовал выполнить в отдельном файле вне системы, чисто для проверки EVAl все работает ровно.
Ад не то слово. (Добавление)
мне EVAL нужен , для подстановки значения переменных в условие, а после уже выполнить сравнение на уровне PHP кода там пхп сам укажет строке тип такой какой надо, буквально 2 недели назад все нормально было.
Здравствуйте, Недели 2 назад написал своего рода модуль в котором использовалась функция EVAL- она строку конвертирует в bool т.к там используются сравнения(реализация редактируемых фильтров), который тогда работал на ура , я был рад и все такое, и продолжил писать другие фишки к своей системе. сегодня решил запустить этот модуль снова , и тут такая странная вещ выходит -
(сразу предупреждаю - это не сайт и вообще не ресурс для коллективного пользования так-што взлома быть неможет, - прога на локалхосте предназначена для конектов и парсинга других серверов в инете. т.к на других языках не умею )
Строчка кода исполняемая подставляемый фрагмент сравнения из БД:
($this->actManager($o,'ALG-current-actno')!=2) and ($this->actManager($o,'ALG-current-actno')!=1) and $this->search($body,"Тут строка обрабатываемая $this->search")
Тобиш все в норме, но на выводе вижу следующее:
Parse error: syntax error, unexpected T_STRING in Z:\home\HOST_NAME\www\controler.php(325) : eval()'d code on line 1
В ходе дебагов и иследований , я просто пребывал в шоковом состояние и путем медитаций пытался успокоиться, обнаружил что при некоторых манипуляциях , менял амперсанды на AND и обратно, менял переменные в функциях на просто строки,Вырезал все -сохранял -вставлял обратно, вообщем что я тока не делал, незнаю почему но в итоге запись сравнения остаеться такая-же по синтаксису , но вот незадача EVAl работает ,
починил ТАКИМ вот НЕПОНЯТНЫМ способом уже 2 фильтра, осталось 8 , так самое главное что те что я починил я даже сломать немогу -потому как незнаю почему они не работали???? я в шоке народ, может кто с такой ахенейю сталкивался? (Добавление)
Заметил еще одно, заменяя AND на && ошибка преобретает такой вид)
Parse error: syntax error, unexpected T_VARIABLE in Z:\home\HOSTNAME\www\controler.php(325) : eval()'d code on line 1