当值具有Quote时,列值的字符串长度减1

Kan*_*iya 3 php mysql printf codeigniter

嗨,我有"评论"表,这里有一个名为"comment_text"的字段,我将这样的评论插入到表中

   $query="insert into `comments` 
    (`id`,
    `comment_text`, 
    `date`) 
    values
    ('',
    '".sprintf("%-70s",mysql_real_escape_string(ucwords(trim($strTitle63_5))))."',
    '$date')";
Run Code Online (Sandbox Code Playgroud)

如您所见,我将注释长度设置为固定70个字符(原始注释总是少于70个字符.)

一切正常,除非我插入带引号的值,如果我插入带引号的注释,在数据库表中我只能看到69个字符.

示例:

我插入这两条评论

评论1:"统一费率与另一个统一费率代码重叠"

评论2:"索赔细节不符合BSI/BRI指南"

后来当我尝试检查字符串长度.评论1是70,评论2是69.这有什么理由吗?

每个有引用的评论都会给我这个问题.:(.

提前致谢 .

UPDATE

我的代码

模型

function get_coc5_comment_details()
{
    $this->db->select("comment_text");
    $this->db->from("comments");
    $result=$this->db->get();

    return $result->result_array();
}
Run Code Online (Sandbox Code Playgroud)

调节器

function validate_db()
{
    $result = $this->invoice_model->get_comment_details();
    $this->load->view("comment_details_view",array("result"=>$result));
}
Run Code Online (Sandbox Code Playgroud)

视图

foreach ($result as $row)
{
    $comment = $row['comment_text'];

    echo strlen($comment)."<br>";
}
Run Code Online (Sandbox Code Playgroud)

Han*_*nky 5

一切正常,除非我插入带引号的值,如果我插入带引号的注释,在数据库表中我只能看到69个字符.

因为当你的字符串中有一个引号然后你通过mysql_real_escape_string它运行它会\在你的字符串中添加一个:)

这是一个额外的角色.一旦进入,数据库将\被删除,你会看到69.

你为什么不考虑准备好的陈述?

此外,在数据库中存储额外的空间是没有任何理由的并不是好的设计.您可以编写一个用于显示的包装器方法,在使用这些注释器时,可以使用额外的空格附加注释以完成70个字符的长度.我认为你应该将原始评论存储在数据库中.如果有一天这个长度要求由于某种原因变成75怎么办?

例如

$str="test";
echo str_pad($str, 70,'*');   // This will take it to 70 characters.
Run Code Online (Sandbox Code Playgroud)