Добрый день. Пытаюсь написать свой компилятор для SQL запроса, что бы на входе получать шаблон запроса с параметрами, а на выходе готовый SQL, например DbPg::select("select * from settings.settings where adr=?s and org=?n ",array($this->adr,$this->org)) ?s и ?n это параметны которые будут подменены, ?s это строка, ?n число (таких типов больше) текущий код PHP: function select($sql,$parameter) { preg_match_all("/(\?[nfsbdacitP]{1})/i",$sql,$p,PREG_SET_ORDER); foreach($p as $id=>$prm){ $val=parametrConvert($prm[1],$parameter[$id]); $sql=preg_replace("/(\?[nfsbdacitP]{1})/i",$val,$sql,1); } return $sql; } function parametrConvert($prm,$val) { $prm=substr($prm,1); switch($prm){ case"n":// numeric if($val===''||$val===null||$val==='null'||$val==='undefined'||$val=='-1'){ $val='null'; }else{ $val=explode('.',$val)[0]; $val=preg_replace('/\D+/i','',$val); } break; case"s":// string $val="'$val'"; break; } return $val; } все это хорошо работало, пока $this->adr не стало равно '... ?n....' в результате на выходе получаю sql "select * from settings.settings where adr='... 5....' and org=?n" не могли бы подсказать направление, в котором нужно посмотреть ? ) т.е. что бы обрабатывались только параметры в исходном шаблоне без учета содержимого самих параметров спасибо