1

我正在使用 Yii 框架的项目中构建一个数据访问对象。其中一个插入查询相对复杂,因为它分布在三个相关的表中。

此时,我已经写出了 SQL 查询,并且没有使用 QueryBuilder。

在插入功能的开头,我有

$connection = Yii::app()->db;
$transaction = $connection->beginTransaction();

try {
  $command = $connection->createCommand($this->insertQuestion);

  //multiple $command->bindParam() calls

根据文档CDbCommand,可以重用一个实例来构建多个查询。但是,CdbCommand::reset在重新使用新查询时必须调用。

这仅出现在文档的 QueryBuilder 部分中。当我使用CdbCommand::bindParam不使用 QueryBuilder 将变量绑定到查询时,我有必要这样做吗

$command->reset();
$command->setText($sqlText);
$command->bindParam("sqlVar", $variable, PDO::PARAM_INT);

CDbCommand::reset在这种情况下可以跳过使用吗?

4

1 回答 1

0

根据文档,您可以执行以下操作:

$transaction=$connection->beginTransaction();
try
{
   $connection->createCommand($sql1)->execute();
   $connection->createCommand($sql2)->execute();
   //.... other SQL executions
   $transaction->commit();
}
catch(Exception $e)
{
   $transaction->rollback();
}

如果您知道要使用的 SQL,只需将其用于 $sql1、$sql2 和 $sql3。

于 2013-06-08T03:23:43.867 回答