我正在尝试实现一个非常简单的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()替换整个单词?
答案 0 :(得分:2)
使用字边界:
$this->sql = preg_replace("/$parameter\b/", $variable, $this->sql);
// here __^^