如何在PHP中获取MySQL函数的参数

时间:2012-09-07 08:45:39

标签: php mysql regex function parameters

我正在寻找一种方法来获取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
)

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

1 个答案:

答案 0 :(得分:0)

您可以按原样连接它,只需在爆炸时对结果使用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
)
相关问题