PHPでSQLiteを検索する方法について記述します。
入力フォームの値を取得しSQL文を発行して検索する簡単な仕組みにしております。
また今回は、前方・部分・後方・完全一致の条件で検索できるようにもしております。
動作確認に使用したSQLiteには下図のデータが登録されています。
SQLiteのデータを取得(検索)するソースコード
<?php
require_once('common.php');
$query = "";
if(isset($_POST['condition'])){
if($_POST['search_word'] !== ""){
switch ($_POST['condition']) {
case 0:
$query .= 'AND ID like "' . $_POST['search_word'] . '%" OR NAME like "' . $_POST['search_word'] . '%" OR AGE like "' . $_POST['search_word'] . '%"';
break;
case 1:
$query .= 'AND ID like "%' . $_POST['search_word'] . '%" OR NAME like "%' . $_POST['search_word'] . '%" OR AGE like "%' . $_POST['search_word'] . '%"';
break;
case 2:
$query .= 'AND ID like "%' . $_POST['search_word'] . '" OR NAME like "%' . $_POST['search_word'] . '" OR AGE like "%' . $_POST['search_word'] . '"';
break;
case 3:
$query .= 'AND ID = "' . $_POST['search_word'] . '" OR NAME = "' . $_POST['search_word'] . '" OR AGE = "' . $_POST['search_word'] . '"';
break;
}
}
}
$result = sqlite($query);
$conditions = [
['value' => '0', 'text' => '前方一致'],
['value' => '1', 'text' => '部分一致'],
['value' => '2', 'text' => '後方一致'],
['value' => '3', 'text' => '完全一致'],
];
?>
<html>
<head>
<!-- CSS -->
<link rel="stylesheet" href="common.css">
</head>
<body>
<form name="character_search" id="form" method="post" action="">
<h2>SQLiteファイルを任意の条件で検索する</h2>
<select name="condition">
<?php
foreach($conditions as $row){
if($_POST['condition'] == $row['value']){
echo '<option value="' . $row['value'] . '" selected>' . $row['text'] . '</option>';
} else {
echo '<option value="' . $row['value'] . '">' . $row['text'] . '</option>';
}
}
?>
</select>
<input type="text" name="search_word" value="<?php if(isset($_POST['search_word'])) echo $_POST['search_word']; ?>">
<input type="submit" name="search" value="検索" class="">
<!-- 結果判定 -->
<?php if(!empty($result)){ ?>
<table class="c-table">
<thead>
<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<?php
foreach ($result as $row) {
$html = "<tr>";
$html .= "<td style='width:50px;'>" . $row["id"] . "</td>";
$html .= "<td style='width:200px; padding-left:10px;'>" . $row["name"] . "</td>";
$html .= "<td style='width:50px;'>" . $row["age"] . "</td>";
$html .= "</tr>";
echo $html;
}
?>
</tbody>
</table>
<?php } else { ?>
<p>検索結果なし...</p>
<?php } ?>
</form>
</body>
</html>
<?php
/**
* SQLite検索処理
* @param query SQL
* return HTML
*/
function sqlite($query)
{
$db = new SQLite3("./db/Characters.sqlite3");
// SQL文作成
$sql = "SELECT * FROM characters WHERE 1=1 " . $query . ";";
// SQL実行
$results = $db->query($sql);
// 戻り値用のリスト
$characterData = array();
$i = 0;
if ($results) {
while ($rows = $results->fetchArray(SQLITE3_ASSOC)) {
$characterData[$i]['id'] = $rows['ID'];
$characterData[$i]['name'] = $rows['NAME'];
$characterData[$i]['age'] = $rows['AGE'];
$i++;
}
} else {
// 結果が空の場合の処理
}
$db->close();
return $characterData;
}
?>
.c-table{
margin-top: 1rem;
border: 1px solid #000;
}
.c-table thead tr th{
background-color: #222831;
color: #fff;
}
出力結果
▼初期表示
▼前方一致検索の場合
▼部分一致検索の場合
▼後方一致検索の場合
▼完全一致検索の場合
説明は以上となります。
この記事が誰かの助けになれば幸いです。