【问题标题】:How do I get the parameters of a MySQL function in PHP如何在 PHP 中获取 MySQL 函数的参数
【发布时间】:2012-09-01 03:16:03
【问题描述】:

我正在寻找一种方法来获取 MySQL 函数的参数并将它们放入 PHP 中的数组中。示例:

$field = "CONCAT(fieldA, ' ', fieldB)";

到目前为止我所做的是:

preg_match("/^([A-Z_]*)\((.*)\)/", $field, $matches)
$parameters = explode(",", $matches[2]);

这对上面的例子很有效。但是为以下示例尝试相同的解决方案:

$field = "CONCAT_WS(', ', fieldA, fieldB)";

将导致:

Array
(
    [0] => '
    [1] =>  '
    [2] =>  fieldA
    [3] =>  fieldB
)

我想得到:

Array
(
    [0] => ', '
    [1] =>  fieldA
    [2] =>  fieldB
)

我正在寻找一种通用的方法,而不仅仅是我提供的示例。它应该适用于所有类型的参数;字符串、字段名称和函数。

【问题讨论】:

  • 我无法回答这个问题。如何获取 MySQL 函数的参数。?对我来说,这看起来像 XY Problem
  • 好的,我已经详细阐述了我的任务,我希望现在更清楚我想要实现的目标。
  • 这里需要正则表达式魔术师:D

标签: php mysql regex function parameters


【解决方案1】:

您可以按原样连接它,并在分解结果时简单地使用array_filter($result) - 通过不指定回调。空字符串将返回 false,因此将删除导致问题的字符串。 (如果我正确理解您的问题)

或者,使用不同的分隔符并在其上展开?

编辑:根据您的问题,您可以简单地正常获取字段并将它们作为数组返回吗?

基于 PDO

<?php
    $sth = $dbh->prepare("select ', ' as f1, fieldA as f2, fieldB as f3 from tableName");
    $sth->execute();

    print("PDO::FETCH_BOTH: ");
    print("Return next row as an array indexed by both column name and number\n");
    $result = $sth->fetch(PDO::FETCH_BOTH);
    print_r($result);
    print("\n");
?>

输出:

Array
(
    [0] => ', '
    [f1] => ', '
    [1] =>  fieldA
    [f2] =>  fieldA
    [2] =>  fieldB
    [f3] =>  fieldB
)

【讨论】:

  • 这不仅仅是关于 concat 函数。我正在寻找一种获取参数并将它们放入数组的通用方法。
  • @FredvanEtten 您的更新让我更加困惑 - 请参阅编辑。
  • @Fluffeh 他只是想解析字符串并从中获取所有参数。
  • @DanLee 如果 OP 想要在之后拆分它时遇到很多麻烦,我没有得到 concat?
  • @Fluffeh 我认为它甚至与 SQL 无关,而只是纯文本解析。他最大的麻烦是字符串里面可以有,,这也可以用简单的explode来拆分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多