2016-09-28 22 views
0

我有一个完整的mysql查询字符串,该查询字符串Where子句里面我定义了一些变量名称,我应该用从接口传递的值替换它们,但如果用户没有填充任何过滤器,我应该替换整个查询内的相关子语句与1。 假设我在表格中命名为provinces_province_code的html select元素和查询中的同一个字符串。 我已经开发了波纹管代码块以删除查询中的多余空格,并获得where之后的所有字符串。这里$nput_keyprovinces_province_code,$input_val是选择元素'(0,01,02,...,等等)'的值。我检查了是否$input_val0然后我应该用1替换users.province_code = provinces_province_codePhp如何获得没有空间的特定关键字之前发生的第一个单词?

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`发生。 现在的问题是,我怎么能得到这个? 感谢您的任何帮助。

+0

@Anant我从'preg_match()'中使用过'找到'provinces_province_code',但是没有找到任何方法来获得在'= provinces_province_code' – jones

+0

你必须把你的努力放在你的问题上,否则你将面对-ve标记 –

+0

什么定义了一个单词? 2个空格之间的字符串,2 =之间的字符串,? – kerry

回答

0

对不起,我不认识的preg_match但多好,所以我想看看爆炸的字符串到一个数组是这样的: -

<?php 
$string = "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"; 
$subs = explode(" ", $string); 
foreach ($subs as $item) { 
    echo "<li>$item</li>"; 
} 
?> 

然后根据您使用的分隔符,你的字符串是如何格式化你可以搜索数组并查找前面的单词。例如,在上面的例子中,由于前面的单词由空格=空格分隔,所以在(=也被认为是单词)之前它总是2行。或者你可以去掉=,这将是之前的行。这是假设每个单词前面有一个空格,并以空格结尾

相关问题