首页 > 解决方案 > 如何使用 PDO 绑定参数方法将多行文本插入 mysql?

问题描述

我需要在 Blob 类型列中插入多行文本数据。

我的桌子是:

CREATE TABLE `messages` (
  `id` int(11) NOT NULL,
  `msg` longblob NOT NULL
);

此外,我发布此文本以保存到“味精”列:

"This
is
Multiline
Text"

插入部分是;

$mydata->mesaj = "This
is
Multiline
Text";
$sql =  "insert into messages(msg) values (:mesaj)";   
$stmt = $this->dbConnection->prepare($sql);     
$stmt->bindParam(':mesaj', $mydata->mesaj, PDO::PARAM_STR); /* Is it true for use PARAM_STR for longBlob type? */
try {
      $stmt->execute();
} catch (PDOException $e) {
//..blah error blah
}

它确实插入没有换行符的文本。当我尝试打开 blob 记录时,它显示:

这是多行文本

我尝试用 \n 替换 \n。不幸的是,这也是另一个不成功的尝试。需要一个想法。我需要用多行文本保存。谢谢你,丹尼兹

标签: phpmysqlpdo

解决方案


我认为问题在于您用来显示文本的内容。在我使用 PHP7 和 MySQL5.6 的服务器上,我创建了您的表,然后运行了以下代码(与您的基本相同,但变量名略有更改):

echo "<pre>";
$mesaj = "This
is
Multiline
Text";
$sql =  "insert into messages(msg) values (:mesaj)";   
$stmt = $link->prepare($sql);     
$stmt->bindParam(':mesaj', $mesaj, PDO::PARAM_STR); /* Is it true for use PARAM_STR for longBlob type? */
try {
      $stmt->execute();
} catch (PDOException $e) {
//..blah error blah
}
$result = $link->query('SELECT msg FROM messages WHERE id = 1');
if ($result) $row = $result->fetch();
echo $row['msg'] . "\n";
echo addcslashes($row['msg'], "\r\n");

我得到的输出是(如预期的那样):

This
is
Multiline
Text
This\r\nis\r\nMultiline\r\nText

推荐阅读