[lang-ref] ( example_db_access ) ( php )

<?php
	public function testExampleDbAccess(): void
	{
		// new SQLite3(':memory:')
		$db = new SQLite3(':memory:');

		// create table
		$sql = <<<SQL
CREATE TABLE IF NOT EXISTS users(
	id INTEGER PRIMARY KEY,
	name TEXT NOT NULL
)
SQL;
		$this->assertTrue($db->exec($sql));

		// insert
		$name = 'user1';
		$stmt = $db->prepare('INSERT INTO users(name) VALUES(:name)');
		$this->assertNotFalse($stmt);
		$stmt->bindValue(':name', $name, SQLITE3_TEXT);

		$result = $stmt->execute();
		$this->assertNotFalse($result);
		$result->finalize();

		$rowid = $db->lastInsertRowID();

		// select
		$userId = $rowid;
		$stmt = $db->prepare('SELECT * FROM users WHERE id=:id');
		$this->assertNotFalse($stmt);
		$stmt->bindValue(':id', $userId, SQLITE3_INTEGER);

		$result = $stmt->execute();
		$this->assertNotFalse($result);

		$row = $result->fetchArray(SQLITE3_ASSOC);
		$result->finalize();

		$this->assertIsArray($row);
		$this->assertSame('user1', $row['name']);

		// disconnect
		$db->close();
	}
<?php
	public function testExampleDbAccessAlternative(): void
	{
		// PDO('sqlite::memory:')
		$pdo = new PDO('sqlite::memory:');
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

		// create table
		$sql = <<<SQL
CREATE TABLE IF NOT EXISTS users(
	id INTEGER PRIMARY KEY,
	name TEXT NOT NULL
)
SQL;
		$pdo->exec($sql);

		// insert
		$name = 'user1';
		$stmt = $pdo->prepare('INSERT INTO users(name) VALUES(:name)');
		$this->assertNotFalse($stmt);

		$ok = $stmt->execute([
			':name' => $name,
		]);
		$this->assertTrue($ok);

		$rowId = (int) $pdo->lastInsertId();

		// select
		$userId = $rowId;
		$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
		$this->assertNotFalse($stmt);

		$ok = $stmt->execute([
			':id' => $userId,
		]);
		$this->assertTrue($ok);

		$row = $stmt->fetch();
		$this->assertIsArray($row);
		$this->assertSame('user1', $row['name']);

		// disconnect
		$pdo = null;
	}