簡體   English   中英

在Zend Framework 2中執行之前如何打印確切的SQL查詢

[英]How to print exact sql query before execute in Zend Framework 2

我正在使用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.應該沒有區別也沒有困難,對您的$insert對象執行相同的操作。 在這里,我如何執行Sql插入並獲取SQL字符串:

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

2.插入值時,您不知道插入前將生成的值id是什么,但只能在插入時知道它。 這就是為什么對插入值使用getLastGeneratedValue-)方法的原因。

但是,當您更新或刪除值時,其id已定義,您可以讀取它。 因此,您要做的就是從數據庫中讀取它。 在更新或刪除對象之前執行選擇,您將知道所需的所有ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM