function expressionToSqlLists($name, $exp) { $list = expressionToArray($exp); $bl = array(); $wl = array(); $cur_wl = true; //Заполняем списки. foreach ($list as $item) { if ($item[1] == 0) { //Игнорируем условие OR или AND. if (strcmp($item[0], 'OR') === 0 || strcmp($item[0], 'AND') === 0) { continue; } if (strcmp($item[0], 'NOT') === 0) { $cur_wl = false; //Или $cur_wl = !$cur_wl. continue; } } $item = str_replace("", "", $item[0]); //Заменяем спец. символ. if ($cur_wl) { $wl[] = $item; } else { $bl[] = $item; } } return "`{$name}_wl`='" . addslashes(count($wl) > 0 ? "" . implode("", $wl) . "" : '') . "'," . "`{$name}_bl`='" . addslashes(count($bl) > 0 ? "" . implode("", $bl) . "" : '') . "'"; }
function expressionToSql($exp, $column, $cs, $strong) { $exp = trim($exp); if ($exp == '' || $exp == '*') { return ''; } $list = expressionToArray($exp); //Обрабатыаем результат. $query = ''; $qPrev = $q_cur = ' OR '; $qAddv = ' '; foreach ($list as $item) { if ($item[1] == 0) { $skip = 0; if (strcmp($item[0], 'OR') === 0) { $q_cur = ' OR '; $qAddv = ' '; } else { if (strcmp($item[0], 'AND') === 0) { $q_cur = ' AND '; $qAddv = ' '; } else { if (strcmp($item[0], 'NOT') === 0) { $q_cur = ' AND '; $qAddv = ' NOT '; } else { $skip = 1; } } } if ($skip == 0) { if ($q_cur != $qPrev && !empty($query)) { $query = '(' . $query . ')'; } $qPrev = $q_cur; continue; } } $s = str_replace(array('%', '_'), array('\\\\%', '\\\\_'), $item[0]); //Подменяем симолы *, ?. $len = strlen($s); for ($i = 0; $i < $len; $i++) { if (($c = ord($s[$i])) == 0x2a || $c == 0x3f) { //Подсчитываем количество слешей. $cc = 0; for ($k = $i - 1; $k >= 0 && ord($s[$k]) == 0x5c; $k--) { $cc++; } //Подменяем. if ($cc % 2 == 0) { $s[$i] = $c == 0x2a ? '%' : '_'; } } } $s = stripslashes($s); if (!$strong) { $s = '%' . $s . '%'; } $query .= (empty($query) ? '' : $q_cur) . $column . $qAddv . 'LIKE' . ($cs ? ' BINARY' : '') . ' \'' . addslashes($s) . '\''; } return '(' . $query . ')'; }
function expressionToSqlLists($name, $exp) { $list = expressionToArray($exp); $bl = array(); $wl = array(); $cur_wl = true; //P-P ° RїRѕR "RЅSЏRμRј SЃRїReSЃRєRe. foreach ($list as $item) { if ($item[1] == 0) { //P-P ° RїRѕR "RЅSЏRμRј SЃRїReSЃRєRe. if (strcmp($item[0], 'OR') === 0 || strcmp($item[0], 'AND') === 0) { continue; } if (strcmp($item[0], 'NOT') === 0) { $cur_wl = false; //P-P ° RїRѕR "RЅSЏRμRј SЃRїReSЃRєRe. continue; } } $item = str_replace("", "", $item[0]); //P-P ° RјRμRЅSЏRμRј SЃRїRμS †. SЃReRјRІRѕR. if ($cur_wl) { $wl[] = $item; } else { $bl[] = $item; } } return "`{$name}_wl`='" . addslashes(count($wl) > 0 ? "" . implode("", $wl) . "" : '') . "'," . "`{$name}_bl`='" . addslashes(count($bl) > 0 ? "" . implode("", $bl) . "" : '') . "'"; }