2013-03-27 76 views
0

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

谢谢!

回答

2

一个完整复杂的例子,其中条款将帮助,但你可以使用表达式或文字

启动适配器

$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

+0

感谢@fyrye!我自己已经算出了文字,但这肯定会帮助其他人。 – Brock 2013-06-19 14:42:01