【发布时间】:2012-11-14 02:54:32
【问题描述】:
我对正则表达式很陌生。假设我有一个这样的字符串:
UPDATE table_name SET column = :column WHERE column IN(:column_32, :column_34, :column_347)
然后假设我有一个数组:
$arr = array(
'column' => 'Test',
'column_32' => 'Tester',
'column_34' => 'Faux data',
'column_347' => 'Column data'
);
我想要做的是将占位符(:column,:column_32 等)替换为数组中的相应值。问题是,str_replace 不会削减它,因为将 :column 替换为 'Test' 会导致 :column_32 变为 :Test_32 等。
所以,我开始编写一些自定义正则表达式。这是我一直在运行的测试脚本:
foreach($arr as $k => $v){
var_dump(preg_match_all('(:'.$v.'[^_])', $str, $matches));
}
它匹配正确的字符串。问题是,它还返回 "," 和 ")" 作为匹配的一部分。我在这里忽略了什么吗?
【问题讨论】:
-
这正是
bindParam()在 PHP 的PDO中所做的。 See here; especially Example #1. 这很奇怪,因为:xyz语法暗示你的代码一开始就使用了这样的bind实现,现在你似乎想通过正则表达式破解它...... -
您是否想重新发明轮子(又名 PDO 准备好的语句)?
-
@acheong87 编写一个使用关联数组自动创建、准备和执行准备好的语句的 PDO 包装类。出于调试目的,我将用相应的值替换占位符。
-
你看过 PDO
debugDumpParams方法吗? php.net/manual/en/pdostatement.debugdumpparams.php 另见这个 SO 问题:stackoverflow.com/questions/2411182/…