Docker环境下PHP连接MySQL成功但mysqli查询无结果求助
问题分析与解决方案
一、修复SQL语句语法错误
你的查询语句末尾多了一个分号,这会导致MySQL解析失败:
// 错误语句(末尾双分号) $select_query = "SELECT user_password, user_id, user_email, user_status FROM user_login WHERE user_email = '{$email}';;"; // 修正后 $select_query = "SELECT user_password, user_id, user_email, user_status FROM user_login WHERE user_email = '{$email}';";
二、完善查询结果的错误检查与处理
当前代码仅打印$result变量,无法排查查询失败原因或确认结果集状态。添加错误检查和结果处理逻辑:
$result = mysqli_query($conn, $select_query); if (!$result) { // 打印SQL执行错误信息,快速定位问题 _log("Query execution failed: " . mysqli_error($conn)); } else { $total_rows = mysqli_num_rows($result); _log("Total matching records: " . $total_rows); if ($total_rows > 0) { // 获取查询结果 $user_data = mysqli_fetch_assoc($result); _log("Fetched user data: " . json_encode($user_data)); // 返回JSON响应 echo json_encode($user_data); } else { _log("No records found for email: {$email}"); echo json_encode(["status" => "error", "message" => "No matching user found"]); } }
三、Docker环境中验证数据库数据的其他方法
1. 直接进入MySQL容器执行查询
在终端运行以下命令,直接登录容器内的MySQL执行查询:
# 进入MySQL容器并登录指定数据库 docker exec -it db mysql -u MYSQL_USER -pMYSQL_PASSWORD MYSQL_DATABASE
然后执行SQL语句验证数据:
SELECT user_password, user_id, user_email, user_status FROM user_login WHERE user_email = 'abcde@gmail.com';
2. 通过phpMyAdmin可视化验证
访问http://localhost:8080,使用config.php中的账号密码登录,选择目标数据库后,在SQL控制台执行查询语句,直接确认数据是否存在。
四、关键优化建议
- 避免SQL注入:当前直接拼接用户输入到SQL语句的方式存在严重安全风险,改用预处理语句:
$stmt = $conn->prepare("SELECT user_password, user_id, user_email, user_status FROM user_login WHERE user_email = ?"); $stmt->bind_param("s", $email); // "s"表示字符串类型参数 $stmt->execute(); $result = $stmt->get_result(); $user_data = $result->fetch_assoc();
- 配置一致性检查:确保
config.php中的MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE与Docker Compose中定义的环境变量完全一致,无拼写错误。
内容的提问来源于stack exchange,提问作者Aidan Campbell
相关产品推荐
相关产品推荐

