2012-09-23 89 views
1

Possible Duplicate:
PHP Prepared Statements… Bind variable as numeric range in REGEXP?与REGEXP PHP PDO预处理语句

$query = "SELECT * FROM `mytable` WHERE `file` REGEXP 'This string :var'"; 
$stmt = $dbh->prepare($query); 
$stmt->bindValue(':var', 'exists'); 
$stmt->execute(); 

这将引发错误:

SQLSTATE[42000]: Syntax error or access violation

当我在执行前回声$查询,我得到:

SELECT * FROM `mytable` WHERE `file` REGEXP 'This string :var' 

如何地狱你是否在正则表达式中绑定变量?

回答

2

有两件事:您需要告诉mysql您希望将REGEXP应用于哪一列,并且只能在出现值的地方使用占位符(感谢@Barmar)。例如,如果你想搜索col1你需要做的

SELECT * FROM `mytable` WHERE col1 REGEXP CONCAT('This string ', :var) 
+0

我是个白痴... – Norse

+0

这是正确的'This string :var',但它并没有解决问题。您不能在字符串中放置PDO占位符。请参阅上面链接的问题中的答案。 – Barmar

+0

@Barmar thx,编辑,更好? – Erik