PHP实现网页文件上传到phpMyAdmin时SQL查询执行错误求助
PHP网页端上传文件无法写入MySQL数据库解决方案
核心现象:当前实现的PHP文件上传功能已可将文件正常存入本地指定目录,但对应文件信息无法写入MySQL数据库,以下是具体排查方案和修复代码:
常见问题原因
- 未做数据库连接校验:原代码未判断
mysqli_connect是否成功,若数据库账号密码、库名配置错误、数据库服务未启动都会直接导致后续SQL执行失败 - 表/字段不匹配:需确认CodeFlix数据库中存在
fileup表,且表内至少包含title(字符串类型,推荐varchar长度≥50)、image(字符串类型,推荐varchar长度≥200)两个字段 - SQL语法错误:原代码直接拼接用户输入的
$title到SQL语句,若标题包含单引号等特殊字符会直接破坏SQL结构,同时该写法存在严重SQL注入风险 - 无具体报错信息:原代码执行SQL失败仅输出泛化的Error,无法拿到MySQL返回的具体错误原因,不利于排查
修复后完整代码
<!DOCTYPE html> <html> <head> <title>文件上传</title> <meta charset="utf-8"> </head> <body> <form method="post" enctype="multipart/form-data"> <label>标题</label> <input type="text" name="title" required> <label>文件上传</label> <input type="file" name="file" required> <input type="submit" name="submit" value="提交上传"> </form> </body> </html> <?php $localhost = "localhost"; $dbusername = "root"; $dbpassword = ""; $dbname = "CodeFlix"; // 校验数据库连接 $conn = mysqli_connect($localhost, $dbusername, $dbpassword, $dbname); if (!$conn) { die("数据库连接失败: " . mysqli_connect_error()); } if (isset($_POST["submit"])) { $title = $_POST["title"]; // 校验文件上传状态 if ($_FILES["file"]["error"] !== UPLOAD_ERR_OK) { die("文件上传失败,错误码:" . $_FILES["file"]["error"]); } $pname = rand(1000,10000)."-".$_FILES["file"]["name"]; $tname = $_FILES["file"]["tmp_name"]; $uploads_dir = 'images'; // 自动创建不存在的存储目录 if (!is_dir($uploads_dir)) { mkdir($uploads_dir, 0777, true); } if (!move_uploaded_file($tname, $uploads_dir.'/'.$pname)) { die("文件移动到存储目录失败,请检查目录权限"); } // 使用预处理语句执行插入,避免语法错误和SQL注入 $stmt = mysqli_prepare($conn, "INSERT INTO fileup (title, image) VALUES (?, ?)"); mysqli_stmt_bind_param($stmt, "ss", $title, $pname); if(mysqli_stmt_execute($stmt)){ echo "文件上传成功,数据已写入数据库"; } else { echo "数据写入失败,错误信息:" . mysqli_stmt_error($stmt); } // 释放资源 mysqli_stmt_close($stmt); } mysqli_close($conn); ?>
修复后的代码增加了全链路错误提示,执行后如果还有问题可以根据输出的具体错误信息进一步排查即可。
内容的提问来源于stack exchange,提问作者niroo
相关产品推荐
相关产品推荐

