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

时间:2016-12-07 10:34:36

标签: php mysql zend-framework zend-framework2 zend-db

我正在使用Zend框架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;
}

2。对于上次插入的ID,我正在使用此代码并正常工作。

$selectedTable = new TableGateway($this->tblName, $this->dbAdapter);
$selectedTable->insert($dataArray); 
$insertId = $selectedTable->adapter->getDriver()->getConnection()->getLastGeneratedValue();
unset($selectedTable);
return $insertId;

但是对于 UPDATE 如何获取上次更新的ID?对于 DELETE 如何获得受影响的行?因为对于 UPDATE DELETE ,此代码无效。

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

1 个答案:

答案 0 :(得分:3)

1。应该没有区别,也没有困难,在$insert对象上以同样的方式执行。我在这里如何执行Sql插件并获取SQL字符串:

$sql = new Sql($this->dbAdapter);
$insert = $sql->insert('table');
[...]
$sqlString = $insert->getSqlString($this->dbAdapter->getPlatform());

2. 当您插入一个值时,您不知道在插入之前生成的值id是什么,但您只会知道它的插入。这就是为什么插入值有getLastGeneratedValue-)方法的原因。

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