大家好!
我目前正在修复一个应用程序中的一个bug,有一段代码我有一个问题。
$query = $this->em->createQuery(
"SELECT client FROM App\\Entity\\Gescom\\Client client WHERE client.name LIKE CONCAT('%', :query, '%')"
)
->setFirstResult(($request->get('page') - 1) * $request->get('page_limit'))
->setMaxResults($request->get('page_limit'));
$query->execute([
'query' => $request->get('q') . '%'
]);
关于这一行:
$query->execute([
'query' => $request->get('q') . '%'
]);
是否存在SQL注入问题或它是否安全?
我已经在网上搜索过了,但是我找不到我问题的答案。execute()
是否可以防止所有SQL注入,即使我在其中连接了一些东西?
1条答案
按热度按时间7lrncoxx1#
传入
execute()
的是参数名及其值的列表,然后数据库引擎将其安全地放入SQL语句中,以代替匹配的命名占位符(在SQL语句中标记为:
)。因此,在本例中,您实际上没有将任何内容连接到SQL中,而是正确地提供了一个单独的SQL语句和参数值列表。数据库引擎将确保参数化的值永远不会被视为可执行SQL的片段。
因此,是的,它应该是安全的SQL注入。