求助:将文本文件导入MySQL表并在PHP中展示失败问题
解决MySQL数据导入与PHP展示的问题
咱们先拆解你代码里的几个核心问题,再一步步给出修正方案:
1. 语法错误:SQL语句未以字符串形式定义
你定义$query1时直接写了SQL语句,但PHP中必须把SQL语句用引号包裹成字符串,否则会触发语法错误。
2. 未执行导入语句
你只定义了导入的SQL变量,但没有调用mysqli_query()去执行这个操作,数据根本没被写入数据库表中。
3. 缺失错误处理逻辑
不管是数据库连接失败,还是导入/查询语句出错,你都没有做错误捕获,这会导致你完全不知道问题出在哪。
4. LOAD DATA LOCAL INFILE的配置限制
这个语句需要MySQL服务器和PHP客户端同时开启local_infile选项,否则会直接报错。
修正后的完整代码
<?php // 初始化连接并开启本地文件导入支持 $connection = mysqli_init(); mysqli_options($connection, MYSQLI_OPT_LOCAL_INFILE, true); // 连接数据库并添加错误处理 if (!mysqli_real_connect($connection, "127.0.0.1", "root", "", "schedule")) { die("数据库连接失败: " . mysqli_connect_error()); } // 执行数据导入操作 $importQuery = 'LOAD DATA LOCAL INFILE "practice.txt" INTO TABLE assigned_classes'; if (mysqli_query($connection, $importQuery)) { echo "数据导入成功!<br>"; } else { die("导入失败: " . mysqli_error($connection)); } // 查询并展示表中数据 $query = "SELECT * FROM assigned_classes"; $result = mysqli_query($connection, $query); if (mysqli_num_rows($result) > 0) { // 生成HTML表格展示数据 echo "<table border='1'>"; // 输出表头 $fieldInfo = mysqli_fetch_fields($result); echo "<tr>"; foreach ($fieldInfo as $field) { echo "<th>" . $field->name . "</th>"; } echo "</tr>"; // 输出数据行 while ($row = mysqli_fetch_assoc($result)) { echo "<tr>"; foreach ($row as $value) { echo "<td>" . htmlspecialchars($value) . "</td>"; } echo "</tr>"; } echo "</table>"; } else { echo "表中暂无数据"; } // 关闭数据库连接 mysqli_close($connection); ?>
额外注意事项
- 文件路径与权限:确保
practice.txt在PHP脚本的同一目录下,或者使用绝对路径(比如/var/www/html/practice.txt),同时要保证PHP进程对该文件有读取权限。 - MySQL配置调整:在MySQL的配置文件(
my.cnf或my.ini)中添加local_infile = 1,然后重启MySQL服务。 - 表结构匹配:如果你的文本文件有特殊分隔符(比如逗号、制表符),需要在
LOAD DATA语句中明确指定,示例:
请根据你的文本文件实际格式调整分隔符参数。LOAD DATA LOCAL INFILE "practice.txt" INTO TABLE assigned_classes FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
内容的提问来源于stack exchange,提问作者MOMO
相关产品推荐
相关产品推荐

