データベースに行が存在しない場合は指定された ID で作成し、そうでない場合はその行を更新するコードがあります。少し遅いです(行が存在するかどうかを確認してから挿入/更新します)、最適化したいと思います。全体を 1 つの SQL クエリに統合するにはどうすればよいですか? INSERT ... ON DUPLICATE KEY UPDATE を使用する必要があると思いますが、その仕組みがわかりません。ありがとうございました。
$objectExists = true;
try {
$object = new Object();
$object->loadFromDatabaseById($this->id, $dbh); // tries to load object from database, throws
// ExceptionNotFound if object with specified id does not exist
}
catch(ExceptionNotFound $e) {
$objectExists = false;
}
if($objectExists)
$sth = $dbh->prepare(
'UPDATE objects ' .
'SET property1 = :property1, ' .
'property2 = :property2, ' .
'property3 = :property3 ' .
'WHERE id = :id'
);
else
$sth = $dbh->prepare(
'INSERT INTO objects ' .
'SET id = :id, ' .
'property1 = :property1, ' .
'property2 = :property2, ' .
'property3 = :property3'
);
$sth->bindParam(':id', $this->id, \PDO::PARAM_INT);
$sth->bindParam(':property1', $this->property1, \PDO::PARAM_STR);
$sth->bindParam(':property2', $this->property2, \PDO::PARAM_STR);
$sth->bindParam(':property3', $this->property3, \PDO::PARAM_INT);
$sth->execute();
$this->id = (int)$this->id;