public function StatementTest::testRepeatedInsertStatementReuse in Drupal 9
Tests that a prepared statement object can be reused for multiple inserts.
File
- core/
tests/ Drupal/ KernelTests/ Core/ Database/ StatementTest.php, line 18
Class
- StatementTest
- Tests the Statement classes.
Namespace
Drupal\KernelTests\Core\DatabaseCode
public function testRepeatedInsertStatementReuse() {
$num_records_before = $this->connection
->select('test')
->countQuery()
->execute()
->fetchField();
$sql = "INSERT INTO {test} ([name], [age]) VALUES (:name, :age)";
$args = [
':name' => 'Larry',
':age' => '30',
];
$options = [
'return' => Database::RETURN_STATEMENT,
'allow_square_brackets' => FALSE,
];
$stmt = $this->connection
->prepareStatement($sql, $options);
$this
->assertInstanceOf(StatementInterface::class, $stmt);
$this
->assertTrue($stmt
->execute($args, $options));
// We should be able to specify values in any order if named.
$args = [
':age' => '31',
':name' => 'Curly',
];
$this
->assertTrue($stmt
->execute($args, $options));
$num_records_after = $this->connection
->select('test')
->countQuery()
->execute()
->fetchField();
$this
->assertEquals($num_records_before + 2, $num_records_after);
$this
->assertSame('30', $this->connection
->query('SELECT [age] FROM {test} WHERE [name] = :name', [
':name' => 'Larry',
])
->fetchField());
$this
->assertSame('31', $this->connection
->query('SELECT [age] FROM {test} WHERE [name] = :name', [
':name' => 'Curly',
])
->fetchField());
}