baa*_*a2w 5 php sql doctrine dbal
我有这个简单的例子:
$names = ['a', 'b'];
$query = $dbConnection->createQueryBuilder();
$query->select('*')
->from('foo')
->where($query->expr()->in('name', $names));
print $query->getSQL();
Run Code Online (Sandbox Code Playgroud)
输出
SELECT * FROM foo WHERE name IN (a, b)
Run Code Online (Sandbox Code Playgroud)
而不是预期的
SELECT * FROM foo WHERE name IN ('a', 'b')
Run Code Online (Sandbox Code Playgroud)
我该如何修复它?
虽然我对查询生成器相当陌生,但我确实认为使用准备好的语句等会更好,除非您知道用户输入永远不会在此查询中使用。进一步阅读后我发现:
因此,使用那里的信息,您可以更改必须的查询:
$query->select('*')
->from('foo')
->where($query->expr()->in('name', ':names'))
->setParameter('names', $names, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);
Run Code Online (Sandbox Code Playgroud)
我自己测试了它,它按预期工作,现在还有一个额外的好处,那就是可以安全地免受 SQL 注入攻击。如果您想使用不同的变量类型或混合变量类型,上面链接的文档页面将向您展示如何做到这一点。
| 归档时间: |
|
| 查看次数: |
2192 次 |
| 最近记录: |