【问题标题】:PHP - Replace exact match preg_replacePHP - 替换完全匹配 preg_replace
【发布时间】:2014-10-17 13:25:18
【问题描述】:

我正在尝试实现一个非常简单的 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() 替换整个单词?

【问题讨论】:

  • 无法复制:eval.in/207173
  • 在你的例子中,我认为你复制了它:INSERT INTO logs VALUES (:referer, test2, test2_com);
  • 哈哈哈,谢谢@Kikndanutz!完全错过了

标签: php regex preg-replace


【解决方案1】:

使用单词边界:

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

【讨论】:

  • 我试过这样 :$this->sql = preg_replace("/\b$parameter\b/", $variable, $this->sql); 或者这样 :$this->sql = preg_replace('/\b'.$parameter.'\b/", $variable, $this->sql); 但它什么都没有替代...... :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多