6

最近、データベース API を使用してバージョン 2.1.4 に更新された ZF2 はhttp://framework.zend.com/security/advisory/ZF2013-03に変更されました

サブクエリに使用したコードは例外でした。

$sub = new Select('md_type');
$sub->columns(array(new Expression('COUNT(mt2.parent_id) as total')))
    ->where(array(
        new \Zend\Db\Sql\Predicate\Expression('mt2.parent_id = mt1.id')
    ))
;

$subquery = new \Zend\Db\Sql\Expression("({$sub->getSqlString()})");

$select = new \Zend\Db\Sql\Select('mt1');
$select->columns(array('*', 'cnt' => $subquery));

$sub->getSqlString() ------> 注意: Zend\Db\Adapter\Platform\Mysql の値を拡張機能やドライバーのサポートなしで引用しようとすると、本番環境でセキュリティの脆弱性が発生する可能性があります。

サブクエリを使用する別の方法が見つかりません。なり方、サブクエリの使い方を教えてください。ありがとう!


バグです: https://github.com/zendframework/zf2/pull/4068

近い将来、それは修正されたと思います。

4

2 に答える 2

6

これを試してください。

$sql = new Sql($this->_adapter);
$mainSelect = $sql->select()->from('mt1');
$subQry = $sql->select()
        ->from('md_type')
        ->columns(array('orderCount' => new \Zend\Db\Sql\Expression('COUNT(md_type.parent_id)')))
        ->where('mt2.parent_id = mt1.id');
$mainSelect->columns(
        array(
            'id', 
            'total' => new \Zend\Db\Sql\Expression('?', array($subQry)),
        )
);

$statement = $sql->prepareStatementForSqlObject($mainSelect);
$comments = $statement->execute();
$resultSet = new ResultSet();
$resultSet->initialize($comments);

return $resultSet->toArray();

参照: ZF2 - サブクエリ

于 2013-04-04T10:57:24.070 に答える
-1

存在するサブクエリを実行しようとして、この同じ問題に遭遇しました。セットアップ方法を説明するコード例をブログ投稿に書きました。http://arnkerr.blogspot.com/2013/08/zf2-sql-exists-sub-query-using-zf2.html?m=1

于 2013-08-10T15:09:52.070 に答える