私はこのような2つの文字列を持っています:
$a = "John, Male , Central Java";
$b = "name = John and gender= Male";
これらの文字列を次のようにします。
$a = "'John','Male','Central Java'";
$b = "username='John' and gender='Male'";
これを達成するために preg_replace で動作するパターンと置換は何ですか?
次のような関数を作成したい:
function select($what, $from, $filter) {
$query = "SELECT $what FROM $from WHERE $filter";
// Performing mysql query.
}
$result = select("*", "user", "username = John and gender = Male");
$quer 出力:SELECT * FROM user WHERE username = John and gender = Male
しかし、出力は有効な mysql 構文ではありません。だから私は出力を次のようにしたい:
SELECT * FROM user WHERE username='John' and gender='Male'
シンボル間のスペースも削除したい。
解決:
私はいくつかのパターンと交換を試みましたが、最終的に解決策を見つけました。クエリ文字列をフォーマットする関数を作成しました。&&
また、 asAND
および||
asを使用して文字列設定を変更しますOR
。そのため、値の文字列に「and」または「or」が含まれていても、preg_replace の影響を受けません。
// Preg replace sample: -> string = string space && string = space
function format_query($qry_string) {
// Remove spaces before and after '='.
$qry_string = preg_replace("/(\s+\=)/", "=", $qry_string);
// string= string space && string= space
$qry_string = preg_replace("/(\=\s+)/", "=", $qry_string);
// string=string space && string=space
// Add single quote between '=' and word than contain space after the word.
$qry_string = preg_replace("/\=(\w+\s+)/", "='$1", $qry_string);
// string='string space && string=space
// Add single quote in first and end of words that start after '=' and not contain space after the word.
$qry_string = preg_replace("/\=(\w+)/", "='$1'", $qry_string);
// string='string space && string='space'
// Add single quote in end of words before of keyword '&&' and '||'.
$qry_string = preg_replace("/(\w+)\s+\&\&/", "$1' &&", $qry_string);
// string='string space' && string='space'
$qry_string = preg_replace("/(\w+)\s+\|\|/", "$1' ||", $qry_string);
// Replate keyword '&&' and '||' to 'and' and 'or'
$qry_string = str_replace("&&", "AND", $qry_string);
$qry_string = str_replace("||", "OR", $qry_string);
return $qry_string;
}
$string = "realname = Nanang El Agung || username = sarjono && password = 123456";
echo format_query($string);
出力:realname='Nanang El Agung' OR username='sarjono' AND password='123456'
この関数は、$b
上記に対して正常に機能します。