使用Angular与PHP无法将超长文本存入数据库该如何解决?
问题排查与解决步骤
1. 首要修复转义函数调用错误
你当前代码里直接调用real_escape_string()是错误用法,该方法是MySQLi连接对象的成员方法,必须绑定数据库连接实例使用,正确写法是:
// 错误写法 $content = real_escape_string($request->content); // 正确写法 $content = $connect->real_escape_string($request->content);
短文本可以正常存入是因为没有触发SQL语法冲突的特殊字符,长文本大概率包含单引号、换行等特殊字符,未正确转义会直接导致SQL语句拼接错误,写入失败。
2. 建议替换为预处理语句(彻底避免转义问题+SQL注入风险)
拼接SQL的方式本身存在安全隐患,改用预处理语句可以完全规避转义错误和注入问题,示例代码如下:
<?php //savepoem.php require ("connect.php"); $postdata= file_get_contents("php://input"); $request = json_decode($postdata); $response = new stdClass(); // 先判断JSON解析是否成功,避免长文本提交异常导致参数为空 if (json_last_error() !== JSON_ERROR_NONE) { $response->msg = "参数解析失败"; echo json_encode($response); exit; } $title = $request->title; $content = $request->content; $id = $request->id; $desc = $request->desc; // 预处理语句 $stmt = $connect->prepare("INSERT INTO poem (Title, MemberID, Description, Content) VALUES (?, ?, ?, ?)"); // 绑定参数 s对应字符串类型,i对应整数类型 $stmt->bind_param("siss", $title, $id, $desc, $content); if($stmt->execute()){ $response->msg = "Saved!"; } else { // 调试时可以打开下方注释查看具体错误 // $response->error = $connect->error; } echo json_encode($response); ?>
3. 检查PHP配置的提交长度限制
如果修改后仍有问题,检查php.ini中的以下配置项,确保值大于你要提交的长文本大小:
post_max_size:默认通常为8M,可根据需求调大upload_max_filesize:如果有附件同步提交也需要对应调整
修改后需要重启Apache/Nginx服务生效。
4. 验证字符集配置
确保数据库连接层面指定了utf8编码,在connect.php中建立数据库连接后加入以下代码:
$connect->set_charset('utf8mb4');
避免特殊 emoji 或生僻字导致的写入截断问题。
内容的提问来源于stack exchange,提问作者Biax20
相关产品推荐
相关产品推荐

