php – 带有IN子句的Symfony2.3原始sql查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 带有IN子句的Symfony2.3原始sql查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1511字,纯文字阅读大概需要3分钟。
内容图文
![php – 带有IN子句的Symfony2.3原始sql查询](/upload/InfoBanner/zyjiaocheng/888/017dfc5012d240eaba4e54edf22d4b1a.jpg)
我正在尝试使用doctrine entitymanager为IN子句运行原始sql查询,如下所示.
$idSArray = Array ( [0] => 1 [1] => 2 )
$stmt = $this->getDoctrine()->getEntityManager()
->getConnection()
->prepare('SELECT t1.id , t1.name , t2.start_date , t2.end_date
FROM table1 t1 , table2 t2
WHERE t1.id = t2.matchId AND t1.id IN (:ids)');
$params = array(
'ids' => implode( ",", $idSArray )
);
$stmt->execute($params);
$results = $stmt->fetchAll();
但我只得到Id = 1的结果.如果我将WHERE IN条件硬编码为
WHERE t1.id = t2.matchId AND t1.id IN (1,2)');
然后获得两个ID的结果.谁能告诉我在传递$params数组时我做错了什么.我还打印了输出1,2的内爆结果.所以我无法找到错误以及使用IN子句执行原始sql查询的方法.
解决方法:
回答:
> List of Parameters Conversion
> DoctrineDBALTypes Conversion
所以你做的至少有两个错误.第一个是@Alarid所说的:你不应该破坏你的阵列.第二个是在运行预准备语句时必须使用DoctrineDBALTypes Conversion for IN子句.
最后你的查询是这样的:
$stmt = $this->getDoctrine()->getEntityManager()
->getConnection()
->prepare('SELECT t1.id , t1.name , t2.start_date , t2.end_date
FROM table1 t1 , table2 t2
WHERE t1.id = t2.matchId AND t1.id IN (:ids)');
$stmt->bindValue('ids', $idSArray, \Doctrine\DBAL\Connection::PARAM_INT_ARRAY);
$stmt->execute();
或替代方案:
$stmt = $this->getDoctrine()->getEntityManager()
->getConnection()
->executeQuery('SELECT t1.id , t1.name , t2.start_date , t2.end_date
FROM table1 t1 , table2 t2
WHERE t1.id = t2.matchId AND t1.id IN (:ids)',
array('ids' => $idSArray),
array('ids' => \Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
)
;
内容总结
以上是互联网集市为您收集整理的php – 带有IN子句的Symfony2.3原始sql查询全部内容,希望文章能够帮你解决php – 带有IN子句的Symfony2.3原始sql查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。