【问题标题】:Doctrine query syntax error教义查询语法错误
【发布时间】:2013-03-15 08:49:36
【问题描述】:

我在数据库中有一个值,例如 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 '\'

【问题讨论】:

  • 你试过mysqli_real_escape_string吗?
  • @BojanKovacevic 他在使用学说。此外,mysql_* 函数是deprecated
  • 您应该使用学说的占位符支持。 @Touki,mysqli_* 函数不是:)
  • @Maerlyn 相关评论已编辑
  • 哪个占位符。我没有得到......

标签: php mysql symfony doctrine-orm symfony-2.1


【解决方案1】:

使用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 cacheresult cache 键都会更改,这基本上意味着您将获得巨大的性能损失。

【讨论】:

  • 我收到错误无效的参数格式,?给定,但 : 或 ? 应为预期。
  • No.i 有这种格式...$query = $em->createQuery('SELECT d FROM MyBundle:MyTable d WHERE d.name = ? 1');
  • 感谢@Ocramius 提供更多信息!
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多