[M1 Mac, Big Sur 11.7.2, PHP 8.2.1, MySQL 8.0.31, noFW]
プログラムからクライアント側のローカルファイルを読み込むことは当然厳禁ですが、ファイル出力は可能です。
MySQLの検索結果CSVファイルをhomeディレクトリに出力させてみました。UTF-8であればPythonに比べてCSVファイルの作成は簡単です。
今更ですがPHPでは文字列をピリオドで結合するんですね。当たり前のようにプラスでつないで気付くまでエラーに見舞われていました。この結合方式はPerl由来なのでしょうか。
$db2 = $_COOKIE["db"];
$field2 = $_COOKIE["field"];
$key2 = $_COOKIE["key"];
# MySQLにログイン
$conn = new mysqli('localhost', 'root', 'root');
if (!$conn){
die("MySQL接続に失敗しました");
} else {
// print 'MySQL接続に成功しました';
}
# データベース選択
$select_db = sprintf("use %s", $db2);
$select = $conn->query($select_db);
# 全テーブル取得
$tbls_query = $conn->query('show tables;');
$tbls = $tbls_query->fetch_all(MYSQLI_ASSOC);
$tbls_count = count($tbls);
# homeディレクトリ取得
ob_start();
echo posix_getpwuid(posix_geteuid())['dir'];
$home_dir = ob_get_clean();
$home_dir = strtolower($home_dir);
# csvファイルパス作成
$suffix_csv = '/MySQL/test.csv';
$file_csv = $home_dir.$suffix_csv;
# csvファイル作成
$fp_csv = fopen($file_csv, 'a');
$tbls_num = 1;
$counts = 0;
foreach ($tbls as $tbl) {
$query = sprintf("SELECT * FROM `%s` WHERE `%s` LIKE '%%%s%%'", implode($tbl), $field2, $key2);
$result = $conn->query($query);
$rows = $result->fetch_all(MYSQLI_ASSOC);
# 件数カウント
$count = count($rows);
$counts = $counts + $count;
# csv化(1000件以下)
if ($counts <= 1000){
for($i = 0, $size = count($rows); $i < $size; ++$i){
$row_str = $rows[$i];
fputcsv($fp_csv, $row_str);
}
}
$tbls_num = $tbls_num + 1;
}
fclose($fp_csv);
$conn->close();
exec('mysql.server stop');