当前位置: 首页 > 知识库问答 >
问题:

在SQL查询中插入字符串以使用PHP更改顺序

濮阳茂材
2023-03-14

我想在SQLite查询的每个ORDER BY子句之前插入一个COLLATE NOCASE。这就是我到目前为止所拥有的:

     $string = preg_replace('~(ORDER\s+BY\s+`?.+`?)\s+([ASC|DESC]?)~iU', '$1 COLLATE NOCASE $2', $string);

输出为:

从'test'顺序中选择'x','y',按'x'整理NOCASE ASC,'z'ASC限制0,10

第一个实例被匹配和替换。第二个实例不被替换(因为模式中的ORDER BY子句)。

共有1个答案

仲法
2023-03-14

将正则表达式更改为:

$query = "SELECT `x`, `y` FROM `test` ORDER BY `x` ASC, `z` ASC LIMIT 0, 10";
$query = preg_replace('~(ORDER BY|,)(\s+\S+)\s+(?=ASC|DESC)~iU', ' $1$2 COLLATE NOCASE ', $query);
echo $query,"\n";

输出:

SELECT `x`, `y` FROM `test` ORDER BY `x` COLLATE NOCASE ASC, `z` COLLATE NOCASE ASC LIMIT 0, 10
 类似资料:
  • 这是波莉适合的场景吗?或者从设计的角度来看,在业务逻辑中处理这个是干净的方式吗?然后我需要包装这个逻辑以避免重复我自己。

  • 问题内容: 在以下SQL Server查询中,插入记号(^)是做什么的? 结果如下: 在找到SQUARE()函数之前,我碰到了这一点。 问题答案: 脱字号(^)转换为XOR运算符,它是“按位异或”。用简单的英语来说,它的意思是“任一个,但不是两个”。这是它的作用: 有关按位操作的详细信息,请参见MSDN页面。

  • 问题内容: 我有一长串需要在单列SQL Server表中插入的值。我使用以下代码。但是,这需要很长时间。有没有更简单的方法来实现这一目标? 问题答案: 尝试此操作,它将在单个连接上运行,因此您可以避免按照@vonPryz进行的昂贵开销:

  • 问题内容: 考虑一下我有这行代码 恕我直言,这很容易受到SQL注入的攻击。 因此,我想通过Get / URL发送一个“ var”参数来证明它是可以尝试的,该参数将注入查询,并带有潜在的恶意代码。 我实际上尝试过: 我尝试在执行之前打印出SQL字符串查询,它实际上是2条SQL有效语句。 第一个问题,但实际上似乎mysqli-> query不会一次执行2条语句。是不是 第二个问题,我看到注入查询的一种

  • 问题内容: 我试图找到匹配特定模式的行数。在此示例中,所有以“ 123”开头的内容: 这正在工作: 问题是LIKE会有所不同,所以我试图在脚本中定义它,然后执行查询,但这不起作用: 在第二个示例中,如何使该查询正常工作? 编辑:我也尝试了没有期限(也无法正常工作): 问题答案: 您的语法错误;无需在双引号字符串内放置句点。相反,它应该更像 您可以通过打印出字符串以确认与第一种情况相同来确认这一点。

  • 我有这个代码: 并想补充: 敬它。我试过: 但我收到一个错误。