PHP - 替换完全匹配preg_replace

时间:2014-10-17 13:25:19

标签: php regex preg-replace

我正在尝试实现一个非常简单的PDO bindValue()函数。 (仅用于教育目的)

所以,首先在“前端”代码中,我有一个像这样的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()替换整个单词?

1 个答案:

答案 0 :(得分:2)

使用字边界:

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