gpt4 book ai didi

php - DBAL 查询构建器为 IN 子句创建的表达式没有将值设置为字符串?

转载 作者:搜寻专家 更新时间:2023-10-31 21:01:02 26 4
gpt4 key购买 nike

我有这个简单的例子:

$names = ['a', 'b'];
$query = $dbConnection->createQueryBuilder();
$query->select('*')
->from('foo')
->where($query->expr()->in('name', $names));

print $query->getSQL();

输出

SELECT * FROM foo WHERE name IN (a, b)

而不是预期的

SELECT * FROM foo WHERE name IN ('a', 'b')

我该如何解决?

最佳答案

虽然我对查询构建器相当陌生,但我确实认为您最好使用准备好的语句等,除非您知道用户输入永远不会在此查询中使用。进一步阅读后,我发现了这一点:

http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#list-of-parameters-conversion

因此,使用那里的信息,您可以更改必须进行的查询:

$query->select('*')
->from('foo')
->where($query->expr()->in('name', ':names'))
->setParameter('names', $names, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);

我自己对其进行了测试,它按预期工作,现在还有一个额外的好处,那就是可以安全地免受 SQL 注入(inject)攻击。如果您想使用不同的变量类型或混合使用变量类型,上面链接的文档页面会向您展示如何做到这一点。

关于php - DBAL 查询构建器为 IN 子句创建的表达式没有将值设置为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42570031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com