Linux下向PHP脚本传递MySQL表名参数的实现及代码示例求助
PHP命令行传参实现MySQL表对比生成CSV
下面给你两种适配实际场景的命令行传参实现方式,直接替换你现有脚本里的固定表名逻辑即可:
方法1:用$argv直接获取位置参数
$argv是PHP内置数组,$argv[0]是脚本文件名,后续元素就是你传入的参数,适合参数顺序固定的简单场景。
<?php // createcsv.php // 检查是否传入了两个必填表名参数 if (count($argv) !== 3) { echo "用法: php createcsv.php <旧表名> <新表名>\n"; echo "示例: php createcsv.php products_february products_march\n"; exit(1); } // 提取传入的两个表名 $oldTable = $argv[1]; $newTable = $argv[2]; echo "开始对比表: {$oldTable} 和 {$newTable}\n"; // -------------------------- // 这里替换成你的MySQL对比逻辑 // 示例:模拟生成差异数据 $diffData = [ ['product_id', 'name', 'change_type'], ['101', '无线耳机', '新增'], ['102', '蓝牙音箱', '价格修改'], ['103', '有线耳机', '删除'] ]; // -------------------------- // 生成带表名标识的CSV文件 $csvFileName = "table_diff_{$oldTable}_vs_{$newTable}.csv"; $file = fopen($csvFileName, 'w'); foreach ($diffData as $row) { fputcsv($file, $row); } fclose($file); echo "差异CSV已生成: {$csvFileName}\n"; ?>
运行命令:
php createcsv.php products_february products_march
方法2:用getopt获取命名参数(更直观)
如果担心参数顺序搞混,用命名参数更清晰,适合后续可能加更多参数的场景。
<?php // createcsv.php // 定义可接受的命令行选项:--old和--new都需要带参数 $options = getopt('', ['old:', 'new:']); // 检查必填参数是否齐全 if (!isset($options['old']) || !isset($options['new'])) { echo "用法: php createcsv.php --old <旧表名> --new <新表名>\n"; echo "示例: php createcsv.php --old products_february --new products_march\n"; exit(1); } // 提取表名 $oldTable = $options['old']; $newTable = $options['new']; echo "开始对比表: {$oldTable} 和 {$newTable}\n"; // -------------------------- // 替换成你的MySQL对比逻辑 $diffData = [ ['product_id', 'name', 'change_type'], ['101', '无线耳机', '新增'], ['102', '蓝牙音箱', '价格修改'], ['103', '有线耳机', '删除'] ]; // -------------------------- // 生成CSV文件 $csvFileName = "table_diff_{$oldTable}_vs_{$newTable}.csv"; $file = fopen($csvFileName, 'w'); foreach ($diffData as $row) { fputcsv($file, $row); } fclose($file); echo "差异CSV已生成: {$csvFileName}\n"; ?>
运行命令:
php createcsv.php --old products_february --new products_march
注意事项
- 确保服务器上PHP命令行环境可用,执行
php -v验证版本 - 实际使用时,把示例里的模拟差异数据部分,替换成你的MySQL查询、对比逻辑即可
- 如果需要处理中文等特殊字符,建议在打开文件时指定编码:
fopen($csvFileName, 'w')改成fopen($csvFileName, 'w')后,加fwrite($file, "\xEF\xBB\xBF");写入UTF-8 BOM
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

