0

这是没有的工作声明?

$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 )

执行语句 get 后SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)

假设某些事情不正确$data = array('111|', '114|', '115');

什么是正确的代码?

4

2 回答 2

1

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

改变这个:

$sql->execute($data);

至:

$sql->execute(array('111|114|115'));
于 2013-06-25T19:40:14.453 回答
1

你给正则表达式 3 个参数,而它应该只有一个:

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

所以你终于得到了类似的东西:

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

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

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

然后只需在 SQL 查询中使用一个参数绑定。:

于 2013-06-25T19:42:00.487 回答