1

私はこのような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上記に対して正常に機能します。

4

4 に答える 4

2

最初の例では、それをテストします。

<?php 

$a = "John, Male , Central Java";


foreach ((explode(",", $a)) as $one) {

echo '\''.$one.'\',';
}

出力

'John',' Male ',' Central Java',

Mysql クエリに関しては、このようなことが実現可能です。

<?php 

    $a = "John, Male , Central Java";


    foreach ((explode(",", $a)) as $one) {

.

 function select($one) {  // will run the three statements, relatively.. 

.

   echo '\''.$one.'\',';
    }

二つ目


$b = "name='John' and gender='Male'";

$b = str_replace('name', 'username', $b);

foreach((explode("=",$b[1]))as $one){
echo "$b";
}
于 2013-03-31T18:03:25.497 に答える
1

第二部は

function select($what, $from, $filter) {
$query = mysql_fetch_array(mysql_query("SELECT {$what} FROM {$from} WHERE {$filter}")); extract($query);
return $what;
}
于 2013-03-31T18:07:37.723 に答える