2012-09-07 55 views
2

我正在尋找一種獲取MySQL函數參數的方法,並將它們放入PHP中的數組中。例如:如何在PHP中獲取MySQL函數的參數

$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 
) 

我正在尋找一個通用的方法這樣做,而不僅僅是我提供的例子。它應該適用於所有類型的參數;字符串,字段名稱和函數。

+0

我不能讓這個問題。如何獲取MySQL函數的參數?對我來說,這看起來像[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – Peter

+0

好的,我詳細闡述了我的任務,希望現在更清楚我正在努力實現的。 –

+0

正則表達式魔術師需要在這裏:D – Peter

回答

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 
) 
+0

這不僅僅是concat函數。我正在尋找一種獲取參數並將其放入數組的通用方法。 –

+0

@FredvanEtten您的更新讓我更加困惑 - 請參閱編輯。 – Fluffeh

+0

@Fluffeh他只是想解析字符串,並從中獲取所有參數。 –