Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 使用正则表达式在SQL查询中分离赋值_Php_Regex - Fatal编程技术网

Php 使用正则表达式在SQL查询中分离赋值

Php 使用正则表达式在SQL查询中分离赋值,php,regex,Php,Regex,我需要的是在SQL查询中获取所有赋值。我只对字符串和数字感兴趣。例如: SELECT * FROM my_table WHERE ((name="alex" AND age >= 24) OR gender =1) AND date = CURDATE() ORDER BY active = 1 LIMIT 1 通过使用PHP的preg_match我希望得到一个包含以下值的数组: $values = array( 'alex'// name , 24 //age

我需要的是在SQL查询中获取所有赋值。我只对字符串和数字感兴趣。例如:

SELECT * FROM my_table WHERE ((name="alex" AND age >= 24) OR gender =1) 
AND date = CURDATE() ORDER BY active = 1 LIMIT 1
通过使用PHP的
preg_match
我希望得到一个包含以下值的数组:

$values = array(
    'alex'// name , 
    24    //age, 
    1     //gender,
    1     //active
);
我是正则表达式的初学者,我所拥有的只是:

preg_match_all('/\=\s*?(.*)\s*/', $sqlquery, $matches);
它将返回一个匹配,第一个操作符找到后的匹配

/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| |  |________|  |_____|
 Assign| op   |          |
    optional s|pace  Optional function call
          Any word, number, ", ' and space
差不多

/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| |  |________|  |_____|
 Assign| op   |          |
    optional s|pace  Optional function call
          Any word, number, ", ' and space
差不多

/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| |  |________|  |_____|
 Assign| op   |          |
    optional s|pace  Optional function call
          Any word, number, ", ' and space
差不多

/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| |  |________|  |_____|
 Assign| op   |          |
    optional s|pace  Optional function call
          Any word, number, ", ' and space
试试像这样的东西

/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| |  |________|  |_____|
 Assign| op   |          |
    optional s|pace  Optional function call
          Any word, number, ", ' and space
[=>!试试下面的方法

/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| |  |________|  |_____|
 Assign| op   |          |
    optional s|pace  Optional function call
          Any word, number, ", ' and space
[=>!试试下面的方法

/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| |  |________|  |_____|
 Assign| op   |          |
    optional s|pace  Optional function call
          Any word, number, ", ' and space
[=>!试试下面的方法

/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| |  |________|  |_____|
 Assign| op   |          |
    optional s|pace  Optional function call
          Any word, number, ", ' and space


[=>!好吧,我不认为使用正则表达式来做这件事是明智的。你觉得使用sql解析器怎么样?我正在考虑将它们作为
PDO::execute
函数的参数发送。24在这里不是赋值。它是一个比较值。但是对于
PDO::exec
函数,你需要一个sql查询。你为什么要这样做首先提取值?是否要使用这些值创建新查询?@ali则您的SQL查询将始终相同,但值除外。因为如果不是,则无法确保变量将绑定到准备好的SQL查询中的匹配参数。因此,如果查询始终具有相同的结构,则您的正则表达式将简单得多。只需将值替换为
*?
是为了不贪婪,也许可以将可选的空格替换为
\s*
。当然,您需要避免妄想症。这样,您还可以检测具有不匹配结构的SQL查询。嗯,我认为使用正则表达式这样做并不明智。您认为呢考虑使用sql解析器吗?我正在考虑将它们作为
PDO::execute
函数的参数发送24在这里不是赋值。它是一个用于比较的值。但是对于
PDO::exec
函数,您将需要一个sql查询。为什么要先提取这些值?是否要用它们创建一个新的查询?@ali then您的SQL查询除了值之外总是相同的。因为如果不是,您无法确保变量将绑定到准备好的SQL查询中的匹配参数。因此,如果查询总是具有相同的结构,您的正则表达式将简单得多。只需将值替换为
*?
用于not beeing贪婪,可能会用
\s*
替换可选的空格。当然,你需要避免妄想。这样你也可以用不匹配的结构检测SQL查询。好吧,我不认为使用正则表达式这样做是明智的。你觉得使用SQL解析器怎么样?我正在考虑将它们作为r
PDO::execute
函数24在这里不是赋值。它是一个用于比较的值。但是对于
PDO::exec
函数,您需要一个SQL查询。为什么要先提取这些值?是否要用它们创建一个新的查询?@ali那么您的SQL查询除了值之外将始终是相同的。因为如果不是这样的话,您无法确保变量将绑定到准备好的SQL查询中的匹配参数。因此,如果查询始终具有相同的结构,您的正则表达式将更加简单。只需将值替换为
*?
用于避免贪婪,并可能将可选空白替换为
\s*
。以及当然,您需要避免妄想。这样,您还可以检测具有不匹配结构的SQL查询。好吧,我不认为使用正则表达式这样做是明智的。您认为使用SQL解析器如何?我正在考虑将它们作为
PDO::execute
function24的参数发送。在这里,它不是赋值s是一个用于比较的值。但是对于
PDO::exec
函数,您需要一个SQL查询。为什么要先提取这些值?是否要用它们创建一个新查询?@ali那么您的SQL查询除了值之外将始终是相同的。因为如果不是,您无法确保变量将绑定到匹配的参数因此,如果查询总是具有相同的结构,您的正则表达式就会简单得多。只需将值替换为
*?
是为了避免贪婪,可能会将可选空格替换为
\s*
。当然,您需要避免妄想症。这样,您还可以检测到具有不匹配结构的QL查询。我想将这些值作为
PDO::execute()
的参数发送。我认为这是最快的方法。没有复杂的对象,只需按原样发送查询,解析器就会“智能地”发送查询获取可参数化的值。@ali但如果查询中已经有了这些值,则会抛出错误,因为找不到此类参数。我想将这些值作为
PDO::execute()
的参数发送。我认为这是最快的方法。没有复杂的对象,只需按原样发送查询,解析器就会“智能地”发送查询获取可参数化的值。@ali但如果查询中已经有了这些值,则会抛出错误,因为找不到此类参数。我想将这些值作为
PDO::execute()
的参数发送。我认为这是最快的方法。没有复杂的对象,只需按原样发送查询,解析器就会“智能地”发送查询获取可参数化的值。@ali但如果查询中已经有了这些值,则会抛出错误,因为找不到此类参数。我想将这些值作为
PDO::execute()
的参数发送。我认为这是最快的方法。没有复杂的对象,只需按原样发送查询,解析器就会“智能地”发送查询获取可参数化的值。@ali但如果您在查询中已经有了这些值,它将抛出错误,因为找不到此类参数。
[a-zA-Z0-9]+匹配等于的左侧。
([“a-zA-Z0-9]+)匹配右侧