我有一个完整的mysql查询字符串,该查询字符串Where
子句里面我定义了一些变量名称,我应该用从接口传递的值替换它们,但如果用户没有填充任何过滤器,我应该替换整个查询内的相关子语句与1
。 假设我在表格中命名为provinces_province_code
的html select元素和查询中的同一个字符串。 我已经开发了波纹管代码块以删除查询中的多余空格,并获得where
之后的所有字符串。这里$nput_key
是provinces_province_code
,$input_val
是选择元素'(0,01,02,...,等等)'的值。我检查了是否$input_val
是0
然后我应该用1
替换users.province_code = provinces_province_code
。Php如何获得没有空间的特定关键字之前发生的第一个单词?
if (preg_match('/= ' . $input_key . ' /', trim(preg_replace('/\s+/', ' ', $main_query))) or preg_match('/=' . $input_key . '/', trim(preg_replace('/\s+/', ' ', $main_query))) or preg_match('/= \'' . $input_key . '\'/', trim(preg_replace('/\s+/', ' ', $main_query))) or preg_match('/=\'' . $input_key . '\'/', trim(preg_replace('/\s+/', ' ', $main_query))) or preg_match('/= "' . $input_key . '"/', trim(preg_replace('/\s+/', ' ', $main_query))) or preg_match('/="' . $input_key . '"/', trim(preg_replace('/\s+/', ' ', $main_query)))) {
if($input_val == 0){
$main_query = preg_replace('/ where /', ' WHERE ', $main_query);
$main_query = preg_replace('/ Where /', ' WHERE ', $main_query);
$separatedByWhere = explode("WHERE", $main_query);
$last_where_clause = end($separatedByWhere);
在这里,我之前和之后province_province_code
删除了所有tild,single/double quatation
。
$string = preg_replace('/\`'.$prm_val.'\`/', $prm_val, $last_where_clause);
$string = preg_replace('/\''.$prm_val.'\'/', $prm_val, $string);
$string = preg_replace('/\"'.$prm_val.'\"/', $prm_val, $string);
$string = preg_replace('/\"'.$prm_key.'\"/', $prm_val, $string);
$string = preg_replace('/\"'.$prm_key.'\"/', $prm_val, $string);
$string = preg_replace('/\"'.$prm_key.'\"/', $prm_val, $string);
现在我想要定义的开始和字符串的结束和调用另一个函数来获取所有子串的字符串之间发生的,在我的标准字符串的结尾总是html元素,我的用户作为过滤器的名称(provinces_province_code)
,但字符串的开始是未知的,我需要做的是,我应该得到= $end_string
之前的第一个发生的词,将其用作$start_string
。 $string is
:
users.district_code IS NOT NULL AND users.district_code <> '' AND users.province_code = srs.province_code AND users.province_code = provinces_province_code
GROUP BY users.district_code
$start_string = '';
$end_string = $prm_val;
$statment2beReplaced = self::get_string_between($string, $start_string, $end_string);
$statment2beReplaced = preg_replace('/ and /', ' AND ',$statment2beReplaced);
if(preg_match('/ AND /',$statment2beReplaced)){
$searchString = $statment2beReplaced.''.$prm_val;
$statment2beReplaced = preg_replace('/'.$prm_key.' =/',1,$statment2beReplaced);
$string = preg_replace('/'.$searchString.'/',$statment2beReplaced,$string);
}
else {
$string = preg_replace('/' . $prm_key . $statment2beReplaced . $end_string . '/', 1, $string);
}
$separatedByWhere[key($separatedByWhere)] = $string;
$main_query = implode('WHERE', $separatedByWhere);
}
现在我已经检查了provinces_province_code
存在内部上面的字符串或不 1,如果存在的话,我想第一个字前= provinces_province_code, which in above string its
users.province_code`发生。 现在的问题是,我怎么能得到这个? 感谢您的任何帮助。
@Anant我从'preg_match()'中使用过'找到'provinces_province_code',但是没有找到任何方法来获得在'= provinces_province_code' – jones
你必须把你的努力放在你的问题上,否则你将面对-ve标记 –
什么定义了一个单词? 2个空格之间的字符串,2 =之间的字符串,? – kerry