我正在使用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 ,此代码无效。
有人可以建议如何做这些工作吗?
答案 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。