【问题标题】:ZF2 complex SQL where closesZF2 复杂 SQL 关闭
【发布时间】:2013-03-27 21:27:17
【问题描述】:

如何在 Zend\Db\Sql 中创建复杂的 WHERE 关闭? 那些带有“COLLATE utf_general_ci”或“REGEXP”的人。 还有什么方法可以将查询作为我想要的字符串提供给它?

谢谢!

【问题讨论】:

    标签: php zend-framework2 zend-db-select


    【解决方案1】:

    一个完整的复杂 where 子句的示例会有所帮助,但您可以使用表达式或文字

    启动适配器

    $adapter = new Zend\Db\Adapter\Adapter(array(
        'driver' => 'Mysqli',
        'database' => 'zend_db_example',
        'username' => 'developer',
        'password' => 'developer-password'
     ));
    
    $sql = new Zend\Db\Sql\Sql($adapter);
    
    $qi = function($name) use ($adapter) { return $adapter->platform->quoteIdentifier( $name ); };
    
    $qv = function($name) use ($adapter) { return $adapter->platform->quoteValue( $name ); };
    

    文字

    $regexSpecification = '(\\"key\\":\\"value\\")';
    $sql->select()
            ->from('dbTable')
            ->where->literal( $qi('column1') . " REGEXP " . $qv($regexSpecification) )
            ->or->equalTo('column2', 'value');
    
    //SELECT `dbTable`.* FROM `dbTable` WHERE `column1` REGEXP '(\"key\":\"value\")' OR `column2` = 'value'
    

    表达式

        $expression = new Zend\Db\Sql\Predicate\Expression( "SHA2(".$qi('column2').", 512)" );
        $sql->select()
            ->from('dbTable')
            ->columns( array( 'hashed' => $expression ) )
            ->where( array( $qi('column1') . " COLLATE latin1_general_cs = " . $qv('value'))); 
    
    //SELECT SHA2(`column2`, 512) AS `hashed` FROM `dbTable` WHERE `column1` COLLATE latin1_general_cs = 'value'
    

    适配器执行查询

    $adapter->query( 'ALTER TABLE ADD INDEX('. $qi('foo') .') ON ( '. $qi('foo_column') .' )', Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE );
    

    参考:

    https://packages.zendframework.com/docs/latest/manual/en/modules/zend.db.adapter.html

    https://packages.zendframework.com/docs/latest/manual/en/modules/zend.db.sql.html

    【讨论】:

    • 谢谢@fyrye!我自己弄清楚了文字,但这肯定会帮助周围的其他人。
    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    相关资源
    最近更新 更多