2016-12-07 102 views
2

我正在使用Zend框架2的应用程序。我正在使用TableGateway来选择,插入,更新和删除查询。如何在Zend Framework中执行之前打印精确的sql查询2

1.我的问题是如何在执行INSERT,UPDATE和DELETE语句之前打印精确的sql查询?对于选择声明这里是我的代码,这是我的工作。

$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删除此代码不起作用。

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

回答

2

1.应该没有差别也没有困难,在您的$insert对象上以同样的方式执行。在这里,我怎么执行SQL INSERT和获得SQL字符串:

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

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

但是,当您更新或删除一个值时,其id已被定义,您可以阅读它。所以你所要做的就是从你的数据库中读取它。在更新或删除您的objetct(s)之前进行选择,您将知道所需的所有id。

+0

感谢您的回复。你能告诉我如何使用更新和删除使用TableGateway getaffectedrows()? – anil

相关问题