MySQL REGEXP与?占位符如何与php变量绑定

时间:2013-06-25 19:30:27

标签: php mysql

以下是没有?

的工作声明
$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');

的内容不正确

什么是正确的代码?

2 个答案:

答案 0 :(得分:1)

这意味着REGEXP只需要一个占位符,但是你给它三个。

改变这个:

$sql->execute($data);

为:

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

答案 1 :(得分:1)

你给regexp 3个参数,而它应该只有一个:

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

所以你最终会得到类似的东西:

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

此外,您可以执行以下操作,而不是将| char添加到某些数组元素中:

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

然后在SQL查询中使用一个param绑定。: