是否有执行一个SQL字符串作为Zend框架2查询的方法吗?
我有一个这样的字符串:
$sql = "SELECT * FROM testTable WHERE myColumn = 5"
现在我想直接执行该字符串。
是否有执行一个SQL字符串作为Zend框架2查询的方法吗?
我有一个这样的字符串:
$sql = "SELECT * FROM testTable WHERE myColumn = 5"
现在我想直接执行该字符串。
use Zend\Db\Sql\Sql;
use Zend\Db\Adapter\Adapter;
$dbAdapterConfig = array(
'driver' => 'Mysqli',
'database' => 'dbname',
'username' => 'dbusername',
'password' => 'dbuserpassword'
);
$dbAdapter = new Adapter($dbAdapterConfig);
$sql = new Sql($dbAdapter);
$select = $sql->select();
$select->from('testTable');
$select->where(array('myColumn' => 5));
$statement = $sql->prepareStatementForSqlObject($select);
$result = $statement->execute();
S.实况: 发送\ Db的 → 发送\ DB \的Sql
就在SQL字符串传递给你这样的数据库适配器:
$resultSet = $adapter->query($sql, \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
如果你想传递参数:
$sql = "SELECT * FROM testTable WHERE myColumn = ?";
$resultSet = $adapter->query($sql, array(5));
编辑:请注意查询方法并不总是返回一个结果。 当它的一个结果产生查询( SELECT
)它返回一个\Zend\Db\ResultSet\ResultSet
否则( INSERT
, UPDATE
, DELETE
,...),它会返回一个\Zend\Db\Adapter\Driver\ResultInterface
。
当你离开的第二个参数为空,你会得到一个\Zend\Db\Adapter\Driver\StatementInterface
就可以执行。
如果你正在使用tableGateway,您可以使用此语句运行原始的SQL查询,
$this->tableGateway->getAdapter()->driver->getConnection()->execute($sql);
其中$ SQL涉及到你的原始查询。 这对于那些没有原生ZF2对方喜欢TRUNCATE / INSERT SELECT语句的查询非常有用。
如果你EntityManager
在你的手中$他们,你可以这样做:
$select = $em->getConnection()->executeQuery("
SELECT a.id, a.title, a.announcement, asvc.service_id, COUNT(*) AS cnt,
GROUP_CONCAT(asvc.service_id SEPARATOR \", \") AS svc_ids
FROM article AS a
JOIN articles_services AS asvc ON asvc.article_id = a.id
WHERE
asvc.service_id IN (
SELECT tsvc.service_id
FROM tender AS t
JOIN tenders_services AS tsvc ON tsvc.tender_id = t.id
WHERE t.id = :tenderId
)
GROUP BY a.id
ORDER BY cnt DESC, a.id DESC
LIMIT :articlesCount
", [
'articlesCount' => 5,
'tenderId' => $tenderId,
], [
'articlesCount' => \PDO::PARAM_INT,
]);
$result = $select->fetchAll(); // <-- here are array of wanted rows
我觉得这种方式来执行复杂的查询是最适合的Zend。 但可能是我不是很聪明的在Zend中仍。 将高兴地看到,如果它帮助别人。