嗨我有“评论”表,这里有一个名为“comment_text”的字段,我将这样的评论插入表格
$query="insert into `comments`
(`id`,
`comment_text`,
`date`)
values
('',
'".sprintf("%-70s",mysql_real_escape_string(ucwords(trim($strTitle63_5))))."',
'$date')";
如您所见,我将注释长度设置为固定70个字符(原始注释总是少于70个字符。)
一切正常,除非我插入带引号的值,如果我在数据库表中插入带引号的注释,我只能看到69个字符。
示例:
我插入这两条评论
评论1:“统一费率与另一个统一费率代码重叠”
评论2:“索赔细节不符合BSI / BRI指南”
稍后当我尝试检查字符串长度时。评论1是70,评论2是69.这有什么理由吗?
每个有引用的评论都会给我这个问题。 :(。
提前致谢。
更新
我的代码
模型
function get_coc5_comment_details()
{
$this->db->select("comment_text");
$this->db->from("comments");
$result=$this->db->get();
return $result->result_array();
}
控制器
function validate_db()
{
$result = $this->invoice_model->get_comment_details();
$this->load->view("comment_details_view",array("result"=>$result));
}
视图
foreach ($result as $row)
{
$comment = $row['comment_text'];
echo strlen($comment)."<br>";
}
答案 0 :(得分:5)
一切正常,除非我插入带引号的值,如果我在数据库表中插入带引号的注释,我只能看到69个字符。
因为当您的字符串中有引号然后通过mysql_real_escape_string
运行它时,它会在您的字符串中添加\
:)
这是一个额外的角色。一旦进入数据库,\
将被删除,您将看到69。
为什么不考虑准备好的陈述?
此外,无缘无故地在数据库中存储额外的空间并不是一个好的设计。您可以编写一个用于显示的包装器方法,在使用这些注释器时,可以使用额外的空格附加注释以完成70个字符的长度。我认为你应该将原始评论存储在数据库中。如果由于某种原因某天长度要求变为75,该怎么办?
例如
$str="test";
echo str_pad($str, 70,'*'); // This will take it to 70 characters.