我在数据库中有一个值,例如 stackover /'!@# / ;;“”“.; \';'。/所有特殊字符。 现在我的问题是如何构建如下的查询:
$linkName= // getting from db
$sql_sm="SELECT d FROM MyBundle:MyTable d WHERE d.name = '$linkName'";
我收到错误:
[Syntax Error] line 0, col 115: Error: Expected end of string, got '\'
答案 0 :(得分:3)
使用placeholder support of doctrine orm:
$query = $em->createQuery('SELECT d FROM MyBundle:MyTable d WHERE d.name = ?1');
$query->setParameter(1, $linkName);
$users = $query->getResult();
通过这种方式,您可以防止像您这样的错误,更重要的是:SQL注入。
此方法的另一个相关点是DQL字符串保持不变。每次更改DQL时,query cache和result cache键都会发生变化,这基本上意味着您会遇到巨大的性能损失。