Php 如何在Zend Framework 2中执行前打印精确的sql查询

Php 如何在Zend Framework 2中执行前打印精确的sql查询,php,mysql,zend-framework,zend-framework2,zend-db,Php,Mysql,Zend Framework,Zend Framework2,Zend Db,我正在使用Zend framework 2开发一个应用程序。我使用TableGateway来选择、插入、更新和删除查询 1。我的问题是如何在执行INSERT、UPDATE和DELETE语句之前打印精确的sql查询?对于SELECT语句,这是我的代码 $selectedTable = new TableGateway($this->tblName, $this->dbAdapter); $sql = $selectedTable->getSql(); $select = $sql

我正在使用Zend framework 2开发一个应用程序。我使用TableGateway来选择、插入、更新和删除查询

1。我的问题是如何在执行INSERT、UPDATE和DELETE语句之前打印精确的sql查询?对于SELECT语句,这是我的代码

$selectedTable = new TableGateway($this->tblName, $this->dbAdapter);
$sql = $selectedTable->getSql();
$select = $sql->select();

if ($trace) {
    echo "<br>" . $sql->getSqlstringForSqlObject($select) . "<br>";
    exit;
} 
else {
    $resultSet = $selectedTable->selectWith($select);
    unset($selectedTable);
    return $resultSet;
}
但是对于更新如何获取上次更新的id?对于删除如何获得受影响的行?因为对于更新和删除,此代码不起作用


有人能建议如何做这些工作吗?

1.应该没有区别也没有困难,在
$insert
对象上以同样的方式进行操作。下面是如何执行Sql插入并获取Sql字符串:

$sql = new Sql($this->dbAdapter);
$insert = $sql->insert('table');
[...]
$sqlString = $insert->getSqlString($this->dbAdapter->getPlatform());
2。插入值时,插入前不知道生成的值是什么
id
,但插入后才知道。这就是为什么有用于插入值的
getLastGeneratedValue-
方法


但当您更新或删除一个值时,它的
id
已经定义,您可以读取它。所以你所要做的就是从数据库中读取它。在更新或删除对象之前执行选择,您将知道所需的所有ID

谢谢你的回复。您能告诉我如何使用getaffectedrows()并使用TableGateway进行更新和删除吗?
$sql = new Sql($this->dbAdapter);
$insert = $sql->insert('table');
[...]
$sqlString = $insert->getSqlString($this->dbAdapter->getPlatform());