2013-06-25 30 views
0

這裏正在發言不綁定?MySQL的REGEXP用?佔位符如何與PHP變量

$query_select_all = "SELECT * FROM TableName WHERE CAST(ColumnName AS UNSIGNED) REGEXP '111|114|115'"; 
$sql = $db->prepare($query_select_all); 
$sql->execute(); 

想用'111|114|115'作爲PHP變量(例如$data)。

更改代碼

$data = array('111|', '114|', '115'); 
$query_select_all = "SELECT * FROM TableName WHERE CAST(ColumnName AS UNSIGNED) REGEXP (?,?,?)"; 
$sql = $db->prepare($query_select_all); 
$sql->execute($data); 

$data看起來像Array ([0] => 111| [1] => 114| [2] => 115)

語句的執行得到SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)後。

$data = array('111|', '114|', '115');

什麼是正確的代碼不正確假設的東西嗎?

+0

請打印您的整個查詢。 '$ query_select_all_start'包含什麼? – silkfire

+0

有一刻...會改變的問題 – user2360831

回答

1

這意味着REGEXP預計只有一個佔位符,但您要給它三個。

更改此:

$sql->execute($data); 

到:

$sql->execute(array('111|114|115')); 
+0

哦,我很愚蠢......是的,它適用於一個'?' – user2360831

1

你給3個PARAMS到正則表達式,而它應該只有一個:

... REGEXP (?,?,?)"; 

所以你最終得到的東西,如:

... REGEXP ('111|','114|','115')"; 

而且不是增加|字符一些數組元素,你可以做這樣的事情:

$res = implode('|', $arr); 

,然後只用一個PARAM在SQL查詢綁定: