【问题标题】:? in Doctrine query means??在教义查询是什么意思?
【发布时间】:2010-04-21 19:04:19
【问题描述】:

我想知道这个查询是什么意思:

$blogPost = Doctrine_Query::create()->from('BlogPost p')->where('p.slug = ?', 'doctrine-released')->execute();

有人能解释一下吗?给我?

谢谢

【问题讨论】:

    标签: doctrine


    【解决方案1】:

    我猜,但我敢打赌,? 只是一种表示“这里有一个变量,我稍后会填充它”的方式,就像其他 SQL 变体中的正常绑定一样。在您的示例中,这意味着 ? 在执行时扩展为“doctrine-released”。也就是说,查询变成了where p.slug = 'doctrine-released'

    【讨论】:

    • 但为什么不直接写 p.slug = 'doctrine-released'。这样做有什么好处?
    • 因为你可以利用准备好的语句的优势。检查这个:php.net/manual/en/pdo.prepared-statements.php
    • 在这个确切的例子中,似乎不值得使用准备好的语句。但是当您的数据库有成千上万的用户,并且他们都使用完全相同的预准备语句但使用不同的绑定变量执行它时,您将为自己节省大量的解析时间和内存。
    • 您绑定到准备好的语句的参数也被转义,从而使您的代码更安全。
    • Doctrine 缓存了它的 DQL 查询,尽管在小规模实现中不那么引人注目,但仍然值得使用准备好的语句(因为它很容易),因为这样做它可以判断查询何时是与另一个相同,只是更改了一个属性值-因此可以重用/优化等。
    【解决方案2】:

    如果有一个变量作为参数,那么 '?'用其他明智的'?不需要。

    例如:

    $blogPost = Doctrine_Query::create()->from('BlogPost p')->where('p.slug = ?', $doctrine-released)->execute();

    如果是字符串作为参数

    $blogPost = Doctrine_Query::create()->from('BlogPost p')->where('p.slug' = 'doctrine-released')->execute();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-14
      • 2011-05-26
      • 2021-07-16
      • 2014-10-16
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多