2014-10-17 151 views
1

我試圖實現一個非常簡單的PDO bindValue()函數。 (只作教育用途)PHP - 替換完全匹配preg_replace

因此,首先在 「前端」 的代碼,我有一個SQL查詢是這樣的:

INSERT INTO logs VALUES (:referer, :id_cookie, :id_cookie_com); 

而且我的代碼看起來像這樣:

$stmt->bindValue(':referer', 'test'); 
$stmt->bindValue(':id_cookie', 'test2'); 
$stmt->bindValue(':id_cookie_com', 'test3'); 

我正在分解我的查詢,並獲取以數組中以「:」開頭的所有參數,這很好。

Array 
(
    [0] => :referer 
    [1] => :id_cookie 
    [2] => :id_cookie_com 
) 

但是,當我嘗試替換查詢中的參數,我面臨一個小問題。

如果我這樣做:

public function bindParam($parameter, $variable, $type = null) 
    { 
     $this->sql = preg_replace('/'.$parameter.'/', $variable, $this->sql); 
    } 

我得到這個結果:

INSERT INTO logs VALUES (test, test2, test3_com) 

我不能設法去除_com在查詢結束。我知道爲什麼它在這裏,這是因爲我的preg_replace,匹配我的數組中的id_cookie,而且我必須以id_cookie開頭的變量。

我該如何設法使preg_replace()替換整個單詞?

+0

無法複製:https://eval.in/207173 – 2014-10-17 13:32:36

+0

在你的榜樣,我想你複製它: 'INSERT INTO日誌VALUES(:引用者,TEST2,test2_com );' – Kikndanutz 2014-10-17 13:54:38

+0

哈哈哈,謝謝@Kikndanutz!完全錯過了 – 2014-10-17 13:58:59

回答

2

使用單詞邊界:

$this->sql = preg_replace("/$parameter\b/", $variable, $this->sql); 
//        here __^^ 
+0

我試過像這樣: '$ this-> sql = preg_replace(「/ \ b $ parameter \ b /」,$ variable,$ this-> sql);' 或者像這樣: '$ this - > sql = preg_replace('/ b'。$ parameter。'\ b /「,$ variable,$ this-> sql);' 但是它取代了什麼...... :( – Kikndanutz 2014-10-17 13:37:36

+0

只要保持最後的邊界看到我的編輯。 – Toto 2014-10-17 14:12:14

+0

Yay!工作很好,謝謝! – Kikndanutz 2014-10-17 14:30:03