将占位符解析为SQL参数PHP
我正试图找到一种消除sql争论的好方法,我现在完成它的方式似乎需要很多改进。我试图将字符串中以“,&”分隔的参数转换为SQL参数,如name='ABC'或name='John Doe' 所以 将创造将占位符解析为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,
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 .= '\'';
}
}