ZF2复杂SQL关闭

时间:2013-03-27 21:27:18

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

完整复杂where子句的示例有帮助,但您可以使用Expression或Literal

启动适配器

$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 );

<强> Referneces:

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