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

向MySQL数据库插入含\n的字符串时换行符丢失问题求助

解决MySQL插入时保留字面\n的问题

你的问题核心是PHP字符串中的\n被解析成了实际换行,导致插入数据库后不是你想要的字面\n字符。直接拼接SQL的写法不仅有SQL注入风险,还容易出现转义错误,推荐用以下两种方式解决:

方法一:使用预处理语句(强烈推荐)

不管是PDO还是mysqli,预处理语句能自动处理参数的转义,避免SQL注入,同时准确保留你要的\n字面字符。

PDO示例:

// 建立PDO连接
$pdo = new PDO('mysql:host=你的主机;dbname=你的数据库', '用户名', '密码');
// 预处理SQL语句
$stmt = $pdo->prepare("INSERT INTO pusher_api_holder_v2 (name, text) VALUES (:site_name, :text)");
// 绑定参数
$stmt->bindParam(':site_name', $site_name);
$stmt->bindParam(':text', $text);
// 执行插入
$stmt->execute();

mysqli示例:

// 建立mysqli连接
$conn = mysqli_connect('你的主机', '用户名', '密码', '你的数据库');
// 预处理SQL
$stmt = mysqli_prepare($conn, "INSERT INTO pusher_api_holder_v2 (name, text) VALUES (?, ?)");
// 绑定参数("ss"表示两个字符串类型参数)
mysqli_stmt_bind_param($stmt, "ss", $site_name, $text);
// 执行插入
mysqli_stmt_execute($stmt);

方法二:手动转义(不推荐,仅兼容旧代码)

如果必须用直接拼接的方式,需要先将字符串中的实际换行替换成字面的\n,再用数据库的转义函数处理:

// 把$text中的实际换行转成字面的\\n
$escaped_text = str_replace("\n", "\\n", $text);
// 对所有参数做SQL转义,防止注入
$safe_site_name = mysqli_real_escape_string($conn, $site_name);
$safe_text = mysqli_real_escape_string($conn, $escaped_text);
// 拼接SQL
$sql = "INSERT INTO pusher_api_holder_v2 (name, text) VALUES ('$safe_site_name', '$safe_text')";
// 执行SQL
mysqli_query($conn, $sql);

关键说明:

  • PHP字符串中,双引号包裹的\n会被解析为实际换行符,单引号包裹的\n才是字面的\n。如果你是从外部获取的$text(比如表单、API),要确认它的内容是字面\n还是已经被解析成换行。
  • 永远优先用预处理语句,手动转义不仅麻烦,还容易遗漏导致SQL注入漏洞。

内容的提问来源于stack exchange,提问作者Paweł Gramcow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:25:07