PHP で Sqlite3 を扱う

PHP7 で sqlite3 のファイルに、Read, Update を行います。

Ubuntu でドライバーのインストール

```bash
sudo apt install php7.4-sqlite3
```


```php:cities.php
<?php
//	cities/cities.php?id=t0716
//
//						Jul/27/2018
// --------------------------------------------------------------------------
ini_set("display_errors", 1);
error_reporting(E_ALL);

echo '*** update.php start ***<br />';
echo '*** id = ' . $_GET['id'] . '<br />';


if(isset($_POST['population']))
	{
	$population=$_POST['population'];
	$dbcon= new PDO("sqlite:cities.db");
	echo '*** population = ' . $population . '<br />';

	if($dbcon !==null)
		{
		date_default_timezone_set('Asia/Tokyo');
		$line=date('Y/m/d-H:i');

		$command="UPDATE cities SET population=$population,date_mod='$line' WHERE id='" . $_GET['id'] . "';";

		echo $command . '<br />';

		try
			{
			$stmt = $dbcon-> prepare($command);
			$stmt -> execute();
			}catch (PDOException $e){
				print('Error:'.$e->getMessage());
				die();
			}

		$sql_c = 'select id,population from cities';
		foreach ($dbcon->query($sql_c) as $row)
			{
			echo $row['id'] . '&nbsp;&nbsp;' . 'population = ' .  $row['population'] . '<br />';
			}
		}
	}

	$dbcon=null;
// --------------------------------------------------------------------------
?>

<html>
<head>
<title>Cities</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
</head>
<body>
<h2>Update</h2>
</h2>

<table width="800" border="1" cellpadding="3" cellspacing="0">
<tr bgcolor="#AAAAAA">
<th width="60"><p>id</p></th>
<th width="200"><p>name</p></th>
<th width="80"><p>population</p></th>
<th width="65"><p>date_mod</p></th>
<th width="150"><p>更新</p></th>
</tr>

<?php
$dbcon= new PDO("sqlite:cities.db");
$sql_a = "SELECT * FROM cities WHERE id='" . $_GET['id'] . "';";
foreach($dbcon->query($sql_a) as $row){
?>

<tr>
<td>
<?php
print($row['id']); 
?>
</p></td>
<td><?php print($row['name']); ?></p></td>
<td><?php print($row['population']); ?></p></td>
<td><?php print($row['date_mod']); ?></p></td>
<td>
<?php
}

$dbcon=null;
?>
<br>
<form method="post" action="cities.php?id=<?php print($_GET['id']); ?>"/>
<input type="double" name="population" size="6"><br><br>
<input type="submit" value="更新"/></p>
</form>
</td></tr>
</table>
<p />

Jul/27/2018<p />
</body>
</html>
```

cities.db の　dump ファイルです。

```sql:cities.dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE cities (id varchar(10) NOT NULL PRIMARY KEY,name text,population int,date_mod text);
INSERT INTO cities VALUES('t0711','郡山',34516,'2002-8-9');
INSERT INTO cities VALUES('t0712','会津若松',84973,'2002-9-21');
INSERT INTO cities VALUES('t0713','白河',98214,'2002-6-7');
INSERT INTO cities VALUES('t0714','福島',9999,'2018/07/27-18:46');
INSERT INTO cities VALUES('t0715','喜多方',72145,'2002-7-24');
INSERT INTO cities VALUES('t0716','二本松',91235,'2018/07/27-18:37');
INSERT INTO cities VALUES('t0717','いわき',82754,'2002-4-9');
INSERT INTO cities VALUES('t0718','相馬',57213,'2002-5-14');
INSERT INTO cities VALUES('t0719','須賀川',21598,'2002-3-12');
COMMIT;
```

cities.db を作成するには、

```bash
sqlite3 cities.db < cities.dump
```

ブラウザーでテストするには、次のようにアクセスします。

```text
http://localhost/tmp/cities/cities.php?id=t0711
```

![php7_sqlite3_jun13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/127baea0-5b92-29aa-713a-0ba34e27ed70.png)


curl でテストするには、

```bash
URL="http://localhost/tmp/cities/cities.php?id=t0716"
curl $URL -d population=91235 > tmp01
```

ファイル属性をうまく設定しないと、update が出来ません。

```text
$ ls -al cities.db
-rw-rw-rw- 1 uchida wheel 12288 Jul 27 18:53 cities.db
```

cities というフォルダの属性を、0777 にしておけばオーケーです。

```text
$ ls -al | grep cities
drwxrwxrwx 2 uchida wheel  4096 Jul 27 18:59 cities
```

データベースの確認方法

```text
$ sqlite3 cities.db
SQLite version 3.34.1 2021-01-20 14:10:07
Enter ".help" for usage hints.
sqlite> select * from cities;
t0711|郡山|34516|2002-8-9
t0712|会津若松|84973|2002-9-21
t0713|白河|98214|2002-6-7
t0714|福島|9999|2018/07/27-18:46
t0715|喜多方|72145|2002-7-24
t0716|二本松|91235|2018/07/27-18:37
t0717|いわき|82754|2002-4-9
t0718|相馬|57213|2002-5-14
t0719|須賀川|21598|2002-3-12
sqlite> .exit

次のバージョンで確認しました。

```text
$ php --version
PHP 7.4.16 (cli) (built: Mar 23 2021 16:15:03) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.16, Copyright (c), by Zend Technologies
```