以下是没有?
$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 :(得分: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绑定。: