这是没有?
的工作语句
$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');
有些不正确
什么是正确的代码?
这意味着 REGEXP 只期望一个占位符,但你给它三个。
更改此设置:
$sql->execute($data);
自:
$sql->execute(array('111|114|115'));
你给正则表达式 3 个参数,而它应该只有一个:
... REGEXP (?,?,?)";
所以你最终得到这样的东西:
... REGEXP ('111|','114|','115')";
此外,与其向某些数组元素添加|
字符,不如执行以下操作:
$res = implode('|', $arr);
然后只需在 SQL 查询中使用一个参数绑定。