0

其中哪个更快?

鉴于我已经做了以下...

$query = $em->createQuery("SELECT g FROM SSMURBS\Group g WHERE g.id = {$_POST['group_id']}");
$group = $query->getSingleResult();

以下哪几行代码最好?

(1)

$query = $em->createQuery("SELECT partial p.{id} FROM SSMURBS\Person p WHERE :groupId MEMBER OF p.groups");
$query->setParameter('groupId', $_POST['group_id']);
$member_ids_result = $query->getScalarResult();
$member_ids = $member_ids_result[0];

或者...

(2)

$group_member_ids = array();
foreach( $group->members as $member ){
    $group_member_ids[] = $member->id;
}
4

1 回答 1

1

这两种方法似乎做了两件不同的事情。

  • 第一个获取所有结果并使用第一个结果填充 $member_ids。
  • 第二个遍历组中的每个成员

遍历结果的最好方法是使用查询的iterate()方法。请参阅文档->

$query = $em->createQuery("SELECT g FROM SSMURBS\Group g WHERE g.id = ?1");
$query->setParameter(1, $_POST['group_id']);

$group_member_ids = array();
$iterableResult = $query->iterate();

foreach ($iterableResult as $member) {
    $group_member_ids[] = $member->id;
}

就像我在对您的问题的评论中所说的那样,在查询中使用之前验证用户输入。只是为了安全。

于 2011-08-01T21:59:29.687 回答