2012-09-23 125 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