通过PHP文件使用PowerShell向PostgreSQL表插入数据
问题
现有脚本可完成数据库备份、生成随机密码、压缩备份文件并以该密码加密。目前会将密码导出至.csv文件,后续上传至FTP,但加密文件与密码同处一处无安全性可言。我希望不再导出密码至.csv,而是通过URL将密码提交至.php文件,由该文件将密码、备份日期及数据库名POST至PostgreSQL表。已建立PHP与数据库的连接,请问如何用PowerShell通过该.php文件向数据库提交这些信息?使用.php是为了避免在.PS1文件中存放数据库连接信息。
解决方案
直接用PowerShell的Invoke-RestMethod或Invoke-WebRequest命令就能向PHP接口发送POST请求,传递所需参数,具体实现如下:
1. 构造请求参数
先把要提交的数据库名、备份日期、加密密码整理成哈希表,方便转换为表单数据:
# 替换成你实际的变量值 $dbName = "target_db" $backupDate = Get-Date -Format "yyyy-MM-dd HH:mm:ss" # 按需调整日期格式 $encryptionPassword = "生成的随机密码字符串" # 组装POST请求参数 $postParams = @{ db_name = $dbName backup_date = $backupDate encryption_password = $encryptionPassword }
2. 发送POST请求到PHP接口
调用Invoke-RestMethod发送请求,指定PHP文件的访问URL:
$phpApiUrl = "http://your-server.com/save-backup-info.php" # 替换为实际PHP文件地址 try { # 发送表单格式的POST请求 $response = Invoke-RestMethod -Uri $phpApiUrl -Method Post -Body $postParams -ContentType "application/x-www-form-urlencoded" # 根据PHP返回的结果输出提示 if ($response.success) { Write-Host "备份信息已成功提交" } else { Write-Warning "提交失败:$($response.msg)" } } catch { Write-Error "请求出错:$($_.Exception.Message)" }
3. PHP端配合要点
确保你的PHP文件能正确接收POST参数并写入PostgreSQL,示例逻辑如下(已做SQL注入防护):
<?php // 已有的PostgreSQL连接代码(提前配置好) $pgConn = pg_connect("host=xxx dbname=xxx user=xxx password=xxx"); // 获取POST参数 $dbName = $_POST['db_name'] ?? ''; $backupDate = $_POST['backup_date'] ?? ''; $encryptionPwd = $_POST['encryption_password'] ?? ''; // 参数合法性校验 if (empty($dbName) || empty($backupDate) || empty($encryptionPwd)) { echo json_encode(['success' => false, 'msg' => '参数不完整']); exit; } // 插入数据到目标表(假设表名为backup_records) $insertQuery = "INSERT INTO backup_records (db_name, backup_date, encryption_password) VALUES ($1, $2, $3)"; $insertResult = pg_query_params($pgConn, $insertQuery, [$dbName, $backupDate, $encryptionPwd]); if ($insertResult) { echo json_encode(['success' => true, 'msg' => '数据保存成功']); } else { echo json_encode(['success' => false, 'msg' => '数据库写入失败']); } pg_close($pgConn); ?>
注意事项
- 必须指定
ContentType为application/x-www-form-urlencoded,否则PHP无法通过$_POST获取参数 - PHP端使用
pg_query_params做参数绑定,避免SQL注入风险 - PowerShell的
try-catch块可以捕获网络错误或请求异常,便于排查问题
内容的提问来源于stack exchange,提问作者Tomas Lavrinavičius
相关产品推荐
相关产品推荐

