如何在Zend Framework 2中执行SQL查询之前打印出准确的查询语句

3
我正在使用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;
}

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如何获取受影响的行数?因为对于UPDATEDELETE,此代码不起作用。

有人能建议如何完成这些任务吗?

1个回答

3

1. 在您的$insert对象上,执行SQL插入并获取SQL字符串时,应该没有差异或困难。以下是我执行SQL插入并获取SQL字符串的方法:

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

2. 当您插入值时,您不知道在插入之前将生成什么值的id,但只有在插入后才会知道。这就是为什么有getLastGeneratedValue()方法用于插入值的原因。

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


谢谢您的回复。您能告诉我如何在使用TableGateway时,结合update和delete方法使用getaffectedrows()吗? - Katty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接