将nvarchar值“10,12”转换为数据类型int时转换失败。

3
$sSql = "SELECT * FROM table1 where field1 > 0 and field2 IN (:buzzGroups) and active = 1";
$arrParams = array('buzzGroups' => $vBuzzGroups);
$stmt = $this->tableGateway->getAdapter()->createStatement($sSql);
$stmt->prepare($sSql);
$data = $stmt->execute($arrParams);

这里是$vBuzzGroups = '10,12';的值。

当我仅传递单个值时,它可以工作,但当我尝试使用多个值(用逗号分隔)时,它会给出错误信息。

Conversion failed when converting the nvarchar value '10,12' to data type int

有没有人遇到过这个问题?

您需要将每个IN值识别为单独的值,而不是逗号分隔的字符串...否则它将被视为字符串。 - Mark Baker
@vhu - 类型为INT,但它应该像普通SQL查询中的IN查询一样工作,其中值是用逗号分隔传递的。 - kumar
@GordonLinoff - 这是SQL Server。 - kumar
在Doctrine中,我将参数作为数组传递给IN $vBuzzGroups = array(10,12)。也许这里也是一样的? - danopz
@kumar: 或许你可以借鉴 alan_mm 的解决方案(大约在一半的位置,有两个顶部投票),并为每个 IN 语句使用不同的前缀来适应。 - PaulF
显示剩余3条评论
1个回答

0
使用implode()函数来分割值。
尝试此更新的代码。
$arrParams = array('buzzGroups' => $vBuzzGroups);
$sSql = "SELECT * FROM table1 where field1 > 0 and field2 IN 
(".implode(',',$arrParams).") and active = 1";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接