Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 字符串替换空间_Php_Regex_String - Fatal编程技术网

Php 字符串替换空间

Php 字符串替换空间,php,regex,string,Php,Regex,String,我有两条这样的线: $a = "John, Male , Central Java"; $b = "name = John and gender= Male"; function select($what, $from, $filter) { $query = "SELECT $what FROM $from WHERE $filter"; // Performing mysql query. } $result = select("*", "user", "username

我有两条这样的线:

$a = "John, Male , Central Java";
$b = "name = John and gender= Male";
function select($what, $from, $filter) {
    $query = "SELECT $what FROM $from WHERE $filter";
    // Performing mysql query.
}

$result = select("*", "user", "username = John and gender = Male");
我希望这些字符串变成:

$a = "'John','Male','Central Java'";
$b = "username='John' and gender='Male'";
SELECT * FROM user WHERE username='John' and gender='Male'
为了实现这一点,preg_replace将采用什么模式和替换

我想创建如下函数:

$a = "John, Male , Central Java";
$b = "name = John and gender= Male";
function select($what, $from, $filter) {
    $query = "SELECT $what FROM $from WHERE $filter";
    // Performing mysql query.
}

$result = select("*", "user", "username = John and gender = Male");
$quer Output:从用户名为John、性别为Male的用户中选择*

但是输出不是有效的mysql语法。所以我希望输出变成:

$a = "'John','Male','Central Java'";
$b = "username='John' and gender='Male'";
SELECT * FROM user WHERE username='John' and gender='Male'
我还想删除符号之间的空格

解决方案:

我尝试了一些模式和替换,最后我找到了解决方案。我创建了一个函数来格式化查询字符串。我还使用&&as和| | as或更改字符串设置。因此,即使值字符串包含“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'或username='sarjono'和password='123456'


对于上面的$b,此函数可以正常工作。

这就是这样做的,对于第一个示例,请测试它

<?php 

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


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

echo '\''.$one.'\',';
}
对于Mysql查询,类似这样的查询是可行的

<?php 

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


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

第二个


这就是这样做的,对于第一个例子,测试它

<?php 

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


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

echo '\''.$one.'\',';
}
对于Mysql查询,类似这样的查询是可行的

<?php 

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


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

第二个

第二部分是

function select($what, $from, $filter) {
$query = mysql_fetch_array(mysql_query("SELECT {$what} FROM {$from} WHERE {$filter}")); extract($query);
return $what;
}
第二部分是

function select($what, $from, $filter) {
$query = mysql_fetch_array(mysql_query("SELECT {$what} FROM {$from} WHERE {$filter}")); extract($query);
return $what;
}
使用:

\w=>[a-zA-Z0-9]

\s=>空间

+=>1个或多个字符

?=>0或1个字符

使用:

\w=>[a-zA-Z0-9]

\s=>空间

+=>1个或多个字符

?=>0或1个字符

不要这样做。您正在尝试使用正则表达式构造SQL查询。你的密码,包括所有三个当前答案,会在第一个走进门的奥康纳身上被破解。如果你要解决这个问题,并以某种方式将代码发布到网络上,你将任由第一个黑客摆布,他将尝试一系列众所周知的漏洞攻击,直到他们发现一个你没有想到的角落案例

有关构建SQL语句的完整详细信息和正确方法,请参见和。

不要这样做。您正在尝试使用正则表达式构造SQL查询。你的密码,包括所有三个当前答案,会在第一个走进门的奥康纳身上被破解。如果你要解决这个问题,并以某种方式将代码发布到网络上,你将任由第一个黑客摆布,他将尝试一系列众所周知的漏洞攻击,直到他们发现一个你没有想到的角落案例



有关构建SQL语句的完整详细信息和正确方法,请参见和。

您可以使用regex:split string-to-array,然后内爆。如果使用PDO,您可以使用prepared语句。您可以使用regex:split string-to-array,然后内爆。如果使用PDO,您可以使用prepared语句。是的,第一个示例正在运行。但是b美元呢?它是包含的,也需要拆分。我想我不能用and作为模式来分解它,因为有时候这是单词的一部分,而不是关键字。e、 g.选择*,表格,字段,如我和你,name=John,然后输出将从表格中选择*,其中字段,如“我和你”,name='John'好的,给我几分钟,我看看我能做些什么do@NanangElSutra抱歉,我迟到了,我似乎找不到办法在名字周围加上一个“是的,但你可以看到我的更新标题-第二个是的,第一个示例正在运行。但是b美元呢?它是包含的,也需要拆分。我想我不能用and作为模式来分解它,因为有时候这是单词的一部分,而不是关键字。e、 g.选择*,表格,字段,如我和你,name=John,然后输出将从表格中选择*,其中字段,如“我和你”,name='John'好的,给我几分钟,我看看我能做些什么do@NanangElSutra很抱歉,我迟到了,我似乎找不到办法在名字周围加上一个字母,但你可以看到我的更新标题-second oneHi@alexis,谢谢你的通知。我知道这一点,但目前我正在构建php框架,将查询转发到多个db引擎。我还构建了一些函数,使一些查询更容易。e、 g.|数据::批量|u插入'users | bio','username=john | passwd=123456 | gender=male';虽然用户在输入中键入DELETE TABLE,但函数会自动引用它,因为每个函数只有在类似运算符&&as和或as时才从引号中转义单词。用户还可以使用validate_string验证其字符串。谢谢。在字符串realname=John;删除表用户。然后重新阅读我的答案,以及链接到问题的部分。哦,我问题中的函数只是示例。在我的最后一个函数中:$input=realname=John;删除表用户;删除表地址;出口然后当我调用我的函数时,输出是:realname='John;删除表用户;删除表地址;退出;'。我尝试了许多SQL命令,所有输出都被引用。样品?然后尝试realname=John';删除表用户;,或者别的什么。从您的示例判断,您的代码肯定充满了问题。祝你旅途愉快。嗨,亚历克西斯,谢谢你的通知。我知道这一点,但现在我正在构建php框架来
将查询转发到多个db引擎。我还构建了一些函数,使一些查询更容易。e、 g.|数据::批量|u插入'users | bio','username=john | passwd=123456 | gender=male';虽然用户在输入中键入DELETE TABLE,但函数会自动引用它,因为每个函数只有在类似运算符&&as和或as时才从引号中转义单词。用户还可以使用validate_string验证其字符串。谢谢。在字符串realname=John;删除表用户。然后重新阅读我的答案,以及链接到问题的部分。哦,我问题中的函数只是示例。在我的最后一个函数中:$input=realname=John;删除表用户;删除表地址;出口然后当我调用我的函数时,输出是:realname='John;删除表用户;删除表地址;退出;'。我尝试了许多SQL命令,所有输出都被引用。样品?然后尝试realname=John';删除表用户;,或者别的什么。从您的示例判断,您的代码肯定充满了问题。祝你旅途愉快。