Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将占位符解析为SQL参数PHP_Php_Sql_Parsing - Fatal编程技术网

将占位符解析为SQL参数PHP

将占位符解析为SQL参数PHP,php,sql,parsing,Php,Sql,Parsing,我正试图找到一种消除sql争论的好方法,我现在完成它的方式似乎需要很多改进。我试图将字符串中以“,&”分隔的参数转换为SQL参数,如name='ABC'或name='John Doe' 所以 将创造 WHERE username= 'dan' OR username = 'john' AND username ='steven' 下面我举了一个例子,说明这是如何实现的,但我想知道是否有更好的方法 public static function parseSQLOperators($string,

我正试图找到一种消除sql争论的好方法,我现在完成它的方式似乎需要很多改进。我试图将字符串中以“,&”分隔的参数转换为SQL参数,如name='ABC'或name='John Doe'

所以

将创造

WHERE username= 'dan' OR username = 'john' AND username ='steven'
下面我举了一个例子,说明这是如何实现的,但我想知道是否有更好的方法

public static function parseSQLOperators($string, $content_term, $encapsulate = TRUE) {

        $string = trim($string);
        $length = strlen($string);

        $ADD_PREFIX = true;
        $output = '';
        for ($i = 0; $i < $length; $i++) {

            if ($string[$i] == '!') {

                $output .= ' ' . $content_term . '!=\'';

                if ($i == 0) {
                    $ADD_PREFIX = false;
                }
            } else if ($string[$i] == '+') {
                if (@$string[$i + 1] != '!') {
                    $output .= ' AND ' . $content_term . '=\'';
                } else {
                    $output .= ' AND ';
                }
            } else if ($string[$i] == ',') {
                if (@$string[$i + 1] != '!') {
                    $output .= ' OR ' . $content_term . '=\'';

                } else {
                    $output .= ' OR ';
                }

            }

            if ($string[$i] != '!' && $string[$i] != '+' && $string[$i] != ',') {

                $output .= $string[$i];

                if (@$string[$i + 1] == ',' || @$string[$i + 1] == '+' || @$string[$i + 1] == '!' || $i == $length || $i == $length - 1) {
                    $output .= '\'';
                }
            }
        }//end for

        if ($ADD_PREFIX == true) {
            $output = $content_term . '=\'' . $output;
        }

        if ($encapsulate) {
            $output = '(' . $output . ')';
        }

        return $output;
    }//end parseSQLOperator
公共静态函数parseSQLOperators($string、$content\u term、$enclosure=TRUE){
$string=修剪($string);
$length=strlen($string);
$ADD_PREFIX=true;
$output='';
对于($i=0;$i<$length;$i++){
如果($string[$i]=='!'){
$output.=''.$content\u term.!=\'';
如果($i==0){
$ADD_PREFIX=false;
}
}else if($string[$i]=='+')){
如果(@$string[$i+1]!='!'){
$output.='和'.$content\u术语'=\'';
}否则{
$output.='和';
}
}else if($string[$i]==','){
如果(@$string[$i+1]!='!'){
$output.='或'.$content\u术语'=\'';
}否则{
$output.='或';
}
}
如果($string[$i]!='!'&&$string[$i]!='+'&&$string[$i]!=',')){
$output.=$string[$i];
如果(@$string[$i+1]=',“| |@$string[$i+1]='+'| |@$string[$i+1]='!”| |$i===$length |$i==$length-1){
$output.='\'';
}
}
}//结束
if($ADD_PREFIX==true){
$output=$content\u term.'=\'.$output;
}
如果($封装){
$output='('.$output.');
}
返回$output;
}//结束语法分析器操作符

测试
$string[$i]
的值时,可以使用switch/case语句,如下所示:

   switch ($string[$i])
   {

       case '!':

            $output .= ' ' . $content_term . '!=\'';

            if ($i == 0) {
                $ADD_PREFIX = false;
       break;

       case '+':
            if (@$string[$i + 1] != '!') {
                $output .= ' AND ' . $content_term . '=\'';
            } else {
                $output .= ' AND ';
            }
       break;

       case ',':
            if (@$string[$i + 1] != '!') {
                $output .= ' OR ' . $content_term . '=\'';

            } else {
                $output .= ' OR ';
            }

        }

      default:
            $output .= $string[$i];
            if (@$string[$i + 1] == ',' || @$string[$i + 1] == '+' || @$string[$i + 1] == '!' || $i == $length || $i == $length - 1) {
                $output .= '\'';
            }
    }
你应该用这个
   switch ($string[$i])
   {

       case '!':

            $output .= ' ' . $content_term . '!=\'';

            if ($i == 0) {
                $ADD_PREFIX = false;
       break;

       case '+':
            if (@$string[$i + 1] != '!') {
                $output .= ' AND ' . $content_term . '=\'';
            } else {
                $output .= ' AND ';
            }
       break;

       case ',':
            if (@$string[$i + 1] != '!') {
                $output .= ' OR ' . $content_term . '=\'';

            } else {
                $output .= ' OR ';
            }

        }

      default:
            $output .= $string[$i];
            if (@$string[$i + 1] == ',' || @$string[$i + 1] == '+' || @$string[$i + 1] == '!' || $i == $length || $i == $length - 1) {
                $output .= '\'';
            }
    }