使用 PHP 我试图拆分一个字符串来构建一个 SQL 搜索的 where 子句
Posted
技术标签:
【中文标题】使用 PHP 我试图拆分一个字符串来构建一个 SQL 搜索的 where 子句【英文标题】:Using PHP I am trying to split out a string to build a where clause for a SQL search 【发布时间】:2022-01-16 20:49:31 【问题描述】:我现在正在使用 AdventureWorks 数据库进行练习,我将收到如下字符串:SalesOrderNumber=SOH123 和 CustomerID=1。字符串可能并不总是包含“=”,因为它们可能是 >、=、。
理想情况下,我想将每个字符串拆分为 3 个字段 - 要查询的数据库列、比较(例如 =、>、!= 等)和要搜索的值。
我可以通过大量代码实现我想要的,逐个字符比较,但我希望有人能提出一个非常简单的方法来做到这一点,因为我确信这对于网站来说一定是一个相当普遍的任务。
我不想只在字符串通过时使用它们,因为我需要先对它们进行消毒。我也不想向数据库发送可能会产生 SQL 错误的错误查询。
【问题讨论】:
也许你可以通过"ColumnName":" SalesOrderNumber","Op":"=","Value":"SOH123"
等的JSON数组
这将是一种简单的方法,但它需要更改其他人正在管理的前端。我正在管理后端流程。如果我同时开发前端和后端,那么这将是我的首选。
【参考方案1】:
这是我使用 foreach、explode 和 array 函数的方法:
$strings = [
'SalesOrderNumber=SOH123',
'CustomerID=1',
'BigOrEqual>=44',
'SmallOrEqual<=67',
'NotEqual!=123',
'NotEqual<>2000',
'Smaller<21',
'Bigger>12',
];
function explodeOperators(array $strings) : array
$operators = ['>=','<=','!=','<>','<','>','=']; // do not change this order
$result = [];
foreach ($strings as $expression)
$found = false;
foreach ($operators as $operator)
$exploded = explode($operator, $expression);
if (count($exploded) > 1 and $found === false)
$found = true;
array_splice($exploded, 1, 0, $operator);
$result[] = $exploded;
return $result;
$result = explodeOperators($strings);
print_r($result);
结果如下:
Array
(
[0] => Array
(
[0] => SalesOrderNumber
[1] => =
[2] => SOH123
)
[1] => Array
(
[0] => CustomerID
[1] => =
[2] => 1
)
[2] => Array
(
[0] => BigOrEqual
[1] => >=
[2] => 44
)
[3] => Array
(
[0] => SmallOrEqual
[1] => <=
[2] => 67
)
[4] => Array
(
[0] => NotEqual
[1] => !=
[2] => 123
)
[5] => Array
(
[0] => NotEqual
[1] => <>
[2] => 2000
)
[6] => Array
(
[0] => Smaller
[1] => <
[2] => 21
)
[7] => Array
(
[0] => Bigger
[1] => >
[2] => 12
)
)
【讨论】:
谢谢,您说得对,第一个解决方案并非在所有情况下都有效。但是,您的解决方案确实有效。以上是关于使用 PHP 我试图拆分一个字符串来构建一个 SQL 搜索的 where 子句的主要内容,如果未能解决你的问题,请参考以下文章
从 imageJ 拆分图像名称后,我试图选择字符串的最后一个索引。我知道在 python 中我们可以做 string[-1]