[M1 Mac, Big Sur 11.7.2, PHP 8.2.1, MySQL 8.0.31]
データベース、カラム名、検索語を入力して全テーブル検索できるようにしました。
Pythonとは勝手が違うため、半日以上悪戦苦闘でした。
スクリプトの構成は以下の様になります。
1) mysql_main.php (前回記事と内容は同じ)
2) input.php
3) output.php
PHPはPythonのように配列を丸ごと出力することができないようです。Pythonの使いやすさを再認識しました。
これから実装したい機能は以下の通りです。
1)検索中断ボタン
2)プログレスバー(検索進行度表示)
3)検索結果CSVファイル化
4)検索時間測定
<html>
<?php
header('Cache-Control: no-store, no-cache, must-revalidate');
# MySQLにログイン
$conn = new mysqli('localhost', 'root');
if (!$conn){
die("MySQL接続に失敗しました");
} else {
// print 'MySQL接続に成功しました';
}
$dbs_query = $conn->query('show databases;');
$dbs = $dbs_query->fetch_all(MYSQLI_ASSOC);
$dbs_count = count($dbs);
?>
<head>
<title>MySQL LPW</title>
</head>
<body>
データベース、カラム、検索語を入力してください
<form action="output.php" method="post">
<table border="1">
<tr>
<td>DB</td>
<td><input type="text" name="db"></td>
</tr>
</table>
<tr>
<?php
$num = 0;
foreach ($dbs as $db) {
if ($num == 0){
echo "DB : ";
}
echo implode($db);
if ($num != $dbs_count - 1){
echo ", ";
}
$num = $num + 1;
}
?>
</tr>
<table border="1">
<tr>
<td>COL</td>
<td><input type="text" name="col"></td>
</tr>
</table>
<table border="1">
<tr>
<td><input type="text" name="key"></td>
<td colspan="2" align="center">
<input type="submit" value="検索">
</td>
</tr>
</table>
</form>
</body>
</html>
<html>
<?php
header('Cache-Control: no-store, no-cache, must-revalidate');
?>
<head>
<title>MySQL LPW</title>
</head>
<body>
<?php
include_once'input.php';
$db = $_POST['db'];
printf("DB : %s\n", $db);
$col = $_POST['col'];
printf("COL : %s\n", $col);
$key = $_POST['key'];
printf("検索語 : %s\n", $key);
# データベース選択
$select_db = sprintf("use %s", $db);
$select = $conn->query($select_db);
# 全テーブル取得
$tbls_query = $conn->query('show tables;');
$tbls = $tbls_query->fetch_all(MYSQLI_ASSOC);
$counts = 0;
foreach ($tbls as $tbl) {
$query = sprintf("SELECT * FROM `%s` WHERE `%s` LIKE '%%%s%%'", implode($tbl), $col, $key);
$result = $conn->query($query);
$rows = $result->fetch_all(MYSQLI_ASSOC);
$count = count($rows);
$counts = $counts + $count;
}
$conn->close();
exec('mysql.server stop');
?>
<table border="2">
<tbody>
<tr>
<td>件数</td>
<td width="180"><?php echo $counts; ?></td>
</tr>
</tbody>
</table>
</body>
</html>