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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:06:03