0
如何在Zend \ Db \ Sql中創建複雜的WHERE關閉? 那些與「COLLATE utf_general_ci」或「REGEXP」。 還有什麼方法可以將查詢作爲我想要的字符串提供給它?ZF2複雜SQL關閉
謝謝!
如何在Zend \ Db \ Sql中創建複雜的WHERE關閉? 那些與「COLLATE utf_general_ci」或「REGEXP」。 還有什麼方法可以將查詢作爲我想要的字符串提供給它?ZF2複雜SQL關閉
謝謝!
一個完整複雜的例子,其中條款將幫助,但你可以使用表達式或文字
啓動適配器
$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
感謝@fyrye!我自己已經算出了文字,但這肯定會幫助其他人。 – Brock 2013-06-19 14:42:01