You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决PHP上传CSV到MAMP MySQL数据库的连接及权限问题

问题解决步骤

一、修复「http://localhost:8888 Forbidden」错误

  • 修改MAMP文档根目录:
    1. 打开MAMP,点击顶部菜单栏「MAMP」→「偏好设置」→「Web Server」。
    2. 在「Document Root」选项中,选择你的脚本所在的父目录(比如/Users/davidelks/Dropbox/Personal/php/sites)。
    3. 重启MAMP的Apache服务(点击MAMP主界面的「Stop Servers」再「Start Servers」)。
  • 修正目录/文件权限:
    打开终端,执行以下命令:
    chmod -R 755 /Users/davidelks/Dropbox/Personal/php/sites
    chmod 644 /Users/davidelks/Dropbox/Personal/php/sites/csv_converter/test_connection.php
    

二、解决数据库连接错误

1. 修复「Unknown database 'houston'」

  • 方式一:通过phpMyAdmin创建数据库
    访问http://localhost:8888/phpMyAdmin,登录后点击左侧「新建」,输入数据库名houston,点击「创建」。
  • 方式二:终端执行SQL命令
    打开终端,输入MAMP的MySQL登录命令:
    /Applications/MAMP/Library/bin/mysql -u root -p
    
    输入密码root后,执行创建数据库命令:
    CREATE DATABASE houston;
    

2. 修复「Access denied for user 'root'@'localhost'」

  • 修正MySQL端口和IP拼写错误:
    MAMP默认MySQL端口是8889(8888是Apache端口),且你脚本里的IP地址127.0.01少了一个点,正确应为127.0.0.1。修改连接代码:
    $elements = array(
        "host" => "127.0.0.1:8889",
        "username" => "root",
        "password" => "root",
        "dbname" => "houston"
    );
    $database = new mysqli($elements['host'], $elements['username'], $elements['password'], $elements['dbname']);
    
  • 确认用户权限:
    登录phpMyAdmin,点击「用户账户」,找到root@localhost,检查权限是否包含houston数据库的读写权限,若没有则添加对应权限。

三、优化脚本避免其他问题

1. 修正CSV文件路径

相对路径容易出错,改用绝对路径:

$csv_file = fopen('/Users/davidelks/Dropbox/Personal/php/baby_names/df2.csv', 'r');

若仍打不开,添加错误详情:

if (!$csv_file) {
    die("Failed to open file: " . error_get_last()['message']);
}

2. 替换SQL拼接为预处理语句(防注入+更稳定)

把原来的循环拼接SQL部分替换为:

while (($line = fgetcsv($csv_file)) !== FALSE) {
    $columns = [];
    $values  = [];

    foreach ($line as $key => $value) {
        if (isset($columnMapping[$headers[$key]])) {
            $columns[] = $columnMapping[$headers[$key]];
            $values[]  = $database->real_escape_string($value);
        }
    }

    if (empty($columns)) continue; // 跳过空行

    $columnsStr = implode(", ", $columns);
    $placeholders = implode(", ", array_fill(0, count($values), "?"));
    $stmt = $database->prepare("INSERT INTO baby_data ($columnsStr) VALUES ($placeholders)");
    // 绑定参数:str_repeat("s", count($values)) 表示所有参数都是字符串类型
    $stmt->bind_param(str_repeat("s", count($values)), ...$values);
    
    if (!$stmt->execute()) {
        echo "Error executing query: " . $stmt->error . "<br>";
    }
    $stmt->close();
}

3. 确保表结构匹配

确认baby_data表的字段(Name、Gender、Value、Year、Measure)存在,且字段类型与CSV数据匹配(比如Year设为INT,Value设为FLOAT或INT等)。


内容的提问来源于stack exchange,提问作者elksie5000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:02:03